Junior
Ako pripojiť BroadcastReceiver na príjem správ v Android?
sobes.tech AI
Odpoveď od AI
Existujú dva hlavné spôsoby:
-
Dynamická registrácia:
- Registruje sa a odhlasuje programovo v kóde.
- Žije, kým je aktívny objekt, ktorý ju zaregistroval.
- Používa sa pre udalosti, ktoré nie je potrebné prijímať neustále, alebo keď aplikácia nie je aktívna (napríklad pri zmene orientácie, úrovne nabitia batérie).
// V Activity alebo Fragmentu private val receiver = object : BroadcastReceiver() { override fun onReceive(context: Context?, intent: Intent?) { // Spracovanie prijatej správy intent?.action?.let { action -> when (action) { Intent.ACTION_BATTERY_CHANGED -> { // Spracovanie zmeny batérie } // Iné akcie } } } } override fun onResume() { super.onResume() val intentFilter = IntentFilter().apply { addAction(Intent.ACTION_BATTERY_CHANGED) // Iné akcie } registerReceiver(receiver, intentFilter) } override fun onPause() { super.onPause() unregisterReceiver(receiver) } -
Statická registrácia:
- Je deklarovaná v manifest súbore (
AndroidManifest.xml). - Žije dlhšie ako životný cyklus komponentu, ktorý ju zaregistroval. Môže prijímať správy aj keď aplikácia nie je aktívna (pre niektoré akcie, s obmedzeniami v posledných verziách Androidu).
- Používa sa pre systémové udalosti, ktoré je potrebné prijímať neustále (napríklad pri spustení zariadenia).
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.yourapp"> <application ...> <receiver android:name=".MyBroadcastReceiver" android:exported="true"> <!-- Dôležité pre Android 12+ --> <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED" /> <action android:name="android.intent.action.AIRPLANE_MODE" /> <!-- Iné akcie --> </intent-filter> </receiver> ... </application> </manifest>// Trieda BroadcastReceiver class MyBroadcastReceiver : BroadcastReceiver() { override fun onReceive(context: Context?, intent: Intent?) { // Spracovanie prijatej správy intent?.action?.let { action -> when (action) { Intent.ACTION_BOOT_COMPLETED -> { // Spracovanie ukončenia načítania } Intent.ACTION_AIRPLANE_MODE_CHANGED -> { // Spracovanie zmeny režimu lietadla } // Iné akcie } } } } - Je deklarovaná v manifest súbore (