Junior
Как да свържете BroadcastReceiver за получаване на съобщения в Android?
sobes.tech AI
Отговор от 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) } -
Статична регистрация:
- Обявява се в manifest файла (
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 -> { // Обработка на промяната на режим на полет } // Други действия } } } } - Обявява се в manifest файла (