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")
}
}