Когда нельзя регистрировать Broadcast Receiver в манифесте

«Когда нельзя регистрировать Broadcast Receiver в манифесте» — вопрос из категории Android компоненты, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Регистрация BroadcastReceiver в манифесте не работает в таких случаях:

  1. Для неэкспортируемых broadcast'ов (начиная с Android 8.0) - система не доставит их
  2. Для динамических broadcast'ов (например, LOCAL_BROADCAST) - они работают только в контексте приложения
  3. Когда требуется runtime-проверка разрешений (RECEIVER_EXPORTED/RECEIVER_NOT_EXPORTED)

Пример правильной динамической регистрации:

val filter = IntentFilter("MY_ACTION")
registerReceiver(myReceiver, filter, RECEIVER_NOT_EXPORTED)

Важно: начиная с Android 14, все ресиверы должны явно указывать экспортируемость.