Junior
96
questionbank
Как подключить BroadcastReceiver для получения сообщений в Android?
Ответ от нейросети
sobes.tech AI
Существует два основных способа:
-
Динамическая регистрация:
- Регистрируется и отменяется программно в коде.
- Живет до тех пор, пока объект, который его зарегистрировал, активен.
- Используется для событий, которые не нужно получать постоянно или когда приложение неактивно (например, при изменении ориентации, уровня заряда батареи).
// В Activity или Fragment private val receiver = object : BroadcastReceiver() { override fun onReceive(context: Context?, intent: Intent?) { // Обработка полученного сообщения intent?.action?.let { action -> when (action) { Intent.ACTION_BATTERY_CHANGED -> { // Обработка изменения батареи } // Другие действия } } } } override fun onResume() { super.onResume() val intentFilter = IntentFilter().apply { addAction(Intent.ACTION_BATTERY_CHANGED) // Другие действия } registerReceiver(receiver, intentFilter) } override fun onPause() { super.onPause() unregisterReceiver(receiver) } -
Статическая регистрация:
- Объявляется в файле манифеста (
AndroidManifest.xml). - Живет дольше, чем жизненный цикл компонента, который его зарегистрировал. Может получать сообщения даже когда приложение неактивно (для некоторых действий, но с ограничениями в последних версиях Android).
- Используется для системных событий, которые нужно получать постоянно (например, при загрузке устройства).
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.yourapp"> <application ...> <receiver android:name=".MyBroadcastReceiver" android:exported="true"> <!-- Важно для Android 12+ --> <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED" /> <action android:name="android.intent.action.AIRPLANE_MODE" /> <!-- Другие действия --> </intent-filter> </receiver> ... </application> </manifest>// Класс BroadcastReceiver class MyBroadcastReceiver : BroadcastReceiver() { override fun onReceive(context: Context?, intent: Intent?) { // Обработка полученного сообщения intent?.action?.let { action -> when (action) { Intent.ACTION_BOOT_COMPLETED -> { // Обработка завершения загрузки } Intent.ACTION_AIRPLANE_MODE_CHANGED -> { // Обработка изменения режима полета } // Другие действия } } } } - Объявляется в файле манифеста (