Как отправить отчет из BroadcastReceiver обратно в службу на Android?

#android

#Android

Вопрос:

У меня есть запущенная служба, которая заинтересована в получении уведомлений, если пакеты установлены, удалены или обновлены.

Я понимаю, что я должен использовать широковещательный приемник, но в BroadcastReceiver четко сказано, что…

возможно, вы не показываете диалоговое окно или не привязываетесь к службе из BroadcastReceiver

Итак, мой вопрос — как я могу сообщить службе, что такие трансляции были сделаны.

Ответ №1:

Вы не можете привязаться к нему, но ничто не запрещает вызывать службу через намерение :

 context.startService( <your intent with a name that match the filter of your service> );
  

Затем поместите свои данные в дополнение к этому намерению, как обычно.

Другим вариантом может быть AIDL, но я его еще не изучал.

Ответ №2:

Чтобы расширить текст, который вы процитировали…

В частности, вы можете не показывать диалоговое окно или не привязываться к службе из BroadcastReceiver. Для первого вам следует вместо этого использовать API NotificationManager. Для последнего вы можете использовать Context.startService() для отправки команды службе.

Из документов Context.startService()

Если эта служба еще не запущена, она будет создана и запущена (при необходимости для нее будет создан процесс); если она запущена, то она остается запущенной.

Другими словами, беспроигрышная ситуация, такая как вызов startService() службы, которая уже запущена, не будет иметь отрицательного эффекта.