BroadcastReceiver — это компонент Android, который позволяет приложению реагировать на системные или пользовательские широковещательные сообщения (broadcasts). Эти сообщения могут быть как системными событиями (например, изменение уровня заряда батареи, подключение к Wi-Fi), так и кастомными, отправленными другими приложениями или самим приложением.
onReceive()).onReceive().Регистрируются в AndroidManifest.xml и работают даже когда приложение не запущено.
Пример объявления:
<receiver android:name=".MyReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
</intent-filter>
</receiver>
Особенности:
BOOT_COMPLETED).ACTION_BOOT_COMPLETED).Регистрируются программно через Context (например, Activity или Service) и работают только пока активен контекст.
Пример регистрации:
val receiver = object : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
Toast.makeText(context, "Динамический Broadcast получен!", Toast.LENGTH_SHORT).show()
}
}
val filter = IntentFilter().apply { addAction("com.example.CUSTOM_ACTION") }
registerReceiver(receiver, filter)
Особенности:
Activity не уничтожена).IntentFilter разрешен).Особый тип broadcast, который передается получателям последовательно (по приоритету).
Пример отправки:
sendOrderedBroadcast(
Intent("com.example.ORDERED_ACTION"),
null, // permission
receiver, // final receiver
null, // scheduler
RESULT_OK,
null,
null
)
Особенности:
abortBroadcast()).android:priority (для статических) или IntentFilter.setPriority() (для динамических).Сообщения, которые "застревают" в системе и передаются новым подписчикам.
Важно: Начиная с Android 5.0 (API 21), помечены как deprecated. Вместо них рекомендуется использовать LocalBroadcastManager или другие механизмы.
Пример кастомного broadcast:
// Отправка
sendBroadcast(Intent("com.example.MY_ACTION").apply { putExtra("key", "value") })
// Получение (динамическое)
val receiver = object : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
val data = intent.getStringExtra("key")
Log.d("Receiver", "Получено: $data")
}
}