Junior
Jak podłączyć BroadcastReceiver do odbierania wiadomości w Android?
sobes.tech AI
Odpowiedź od AI
Istnieją dwie główne metody:
-
Rejestracja dynamiczna:
- Rejestruje się i wyrejestrowuje programowo w kodzie.
- Trwa tak długo, jak aktywny jest obiekt, który go zarejestrował.
- Używana do zdarzeń, które nie muszą być odbierane stale lub gdy aplikacja nie jest aktywna (np. przy zmianie orientacji, poziomu naładowania baterii).
// W Activity lub Fragment private val receiver = object : BroadcastReceiver() { override fun onReceive(context: Context?, intent: Intent?) { // Przetwarzanie otrzymanej wiadomości intent?.action?.let { action -> when (action) { Intent.ACTION_BATTERY_CHANGED -> { // Przetwarzanie zmiany baterii } // Inne akcje } } } } override fun onResume() { super.onResume() val intentFilter = IntentFilter().apply { addAction(Intent.ACTION_BATTERY_CHANGED) // Inne akcje } registerReceiver(receiver, intentFilter) } override fun onPause() { super.onPause() unregisterReceiver(receiver) } -
Rejestracja statyczna:
- Deklarowana w pliku manifest (
AndroidManifest.xml). - Dłużej trwa niż cykl życia komponentu, który ją zarejestrował. Może odbierać wiadomości nawet wtedy, gdy aplikacja nie jest aktywna (dla niektórych działań, z ograniczeniami w najnowszych wersjach Androida).
- Używana do zdarzeń systemowych, które muszą być odbierane stale (np. podczas uruchamiania urządzenia).
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.yourapp"> <application ...> <receiver android:name=".MyBroadcastReceiver" android:exported="true"> <!-- Ważne dla Android 12+ --> <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED" /> <action android:name="android.intent.action.AIRPLANE_MODE" /> <!-- Inne akcje --> </intent-filter> </receiver> ... </application> </manifest>// Klasa BroadcastReceiver class MyBroadcastReceiver : BroadcastReceiver() { override fun onReceive(context: Context?, intent: Intent?) { // Przetwarzanie otrzymanej wiadomości intent?.action?.let { action -> when (action) { Intent.ACTION_BOOT_COMPLETED -> { // Przetwarzanie po zakończeniu uruchamiania } Intent.ACTION_AIRPLANE_MODE_CHANGED -> { // Przetwarzanie zmiany trybu samolotowego } // Inne akcje } } } } - Deklarowana w pliku manifest (