Я хотел бы знать, какова наилучшая практика / способ программной регистрации приемника вещания. Я хочу зарегистрировать конкретных получателей по выбору пользователя.
Поскольку регистрация выполняется через файл манифеста, мне интересно, есть ли правильный способ добиться этого в коде.
android
broadcastreceiver
CoolStraw
источник
источник
Ответы:
Похоже, вы хотите контролировать, активны ли компоненты, опубликованные в вашем манифесте, а не динамически регистрировать получателя (через Context.registerReceiver ()) во время работы.
Если это так, вы можете использовать PackageManager.setComponentEnabledSetting () для управления активностью этих компонентов:
http://developer.android.com/reference/android/content/pm/PackageManager.html#setComponentEnabledSetting(android.content.ComponentName, int, int)
Обратите внимание, если вы заинтересованы только в получении трансляции во время работы, лучше использовать registerReceiver (). Компонент приемника в первую очередь полезен для случаев, когда вам необходимо убедиться, что ваше приложение запускается при каждой отправке трансляции.
источник
В вашем
onCreate
методе вы можете зарегистрировать получателя следующим образом:Не забудьте запустить это в
onDestroy
методе:источник
onDestroy()
вызов будет вызван, тем самым создавая потенциальную утечку памяти. Лучше зарегистрироваться / отменить регистрацию вonStart()
/onStop()
.Один важный момент, о котором люди забывают упомянуть, это время жизни
Broadcast Receiver
. Отличие программной регистрации от регистрации в AndroidManifest.xml состоит в том, что. В файле манифеста это не зависит от времени жизни приложения. Хотя при программной регистрации это зависит от времени жизни приложения. Это означает, что если вы зарегистрируетесь в AndroidManifest.xml , вы сможете поймать транслируемые намерения, даже если ваше приложение не запущено.Редактировать: упомянутое примечание больше не относится к Android 3.1, система Android исключает все получатели из намерений получения по умолчанию, если соответствующее приложение никогда не запускалось пользователем или если пользователь явно остановил приложение через меню Android (в Управление → Приложение). https://developer.android.com/about/versions/android-3.1.html
Это дополнительная функция безопасности, поскольку пользователь может быть уверен, что только приложения, которые он запустил, будут получать намерения вещания.
Таким образом, можно понимать, что получатели, программно зарегистрированные в Приложении,
onCreate()
будут иметь тот же эффект, что и получатели , объявленные в AndroidManifest.xml от Android 3.1 выше.источник
Определите приемник вещания в любом месте действия / фрагмента следующим образом:
Определить IntentFilter в
onCreate()
Теперь зарегистрируйте BroadcastReciever в
onResume()
и отмените его регистрациюonPause()
[потому что трансляция не используется, если действие приостановлено].Для подробного руководства взгляните на приемник вещания - два способа реализации .
источник
источник
В соответствии с прослушиванием и трансляцией глобальных сообщений, а также настройкой будильника в общих задачах и как их выполнять в Android :
Посмотрите на registerReceiver (приемник BroadcastReceiver, фильтр IntentFilter) для получения дополнительной информации.
источник
context.registerReceiver
но звонить не получилось. Пожалуйста, посмотрите на этот вопрос stackoverflow.com/questions/13238600/…Рекомендуется всегда указывать разрешение при регистрации получателя, в противном случае вы получите уведомление для любого приложения, которое отправляет соответствующее намерение. Это может позволить вредоносным приложениям транслироваться на ваш приемник.
источник
для LocalBroadcastManager
и зарегистрируйтесь в
onResume
и отмените регистрацию
onStop
и получить это ..
где IntentFilter
источник
Два варианта
registerReceiver(...
) вonStart()
иunregisterReceiver(...)
вonStop()
registerReceiver(...)
вonCreate(...)
иunregisterReceiver(...)
вonDestroy()
Бонус:
Если вы не хотите писать стандартный код для регистрации и отмены регистрации BroadcastReceiver снова и снова в каждом действии, тогда,
Вот фрагмент кода:
Смотрите полный код:
ВОТ
источник
Создать приемник вещания
[BroadcastReceiver (Enabled = true, Exported = false)]
Из вашей деятельности добавьте этот код:
источник