Junior
Kuidas ühendada BroadcastReceiver sõnumite saamiseks Androidis?
sobes.tech AI
Vastus AI-lt
On kaks peamist viisi:
-
Dünaamiline registreerimine:
- Registreeritakse ja tühistatakse programmikoodis.
- Elab seni, kuni aktiivne objekt, mis selle registreeris, on aktiivne.
- Kasutatakse sündmusteks, mida ei ole vaja pidevalt vastu võtta või kui rakendus ei ole aktiivne (näiteks orientatsiooni muutmisel, aku laadimistaseme muutmisel).
// Activity või Fragmentis private val receiver = object : BroadcastReceiver() { override fun onReceive(context: Context?, intent: Intent?) { // Saadud sõnumi töötlemine intent?.action?.let { action -> when (action) { Intent.ACTION_BATTERY_CHANGED -> { // Aku muutuste töötlemine } // Muud tegevused } } } } override fun onResume() { super.onResume() val intentFilter = IntentFilter().apply { addAction(Intent.ACTION_BATTERY_CHANGED) // Muud tegevused } registerReceiver(receiver, intentFilter) } override fun onPause() { super.onPause() unregisterReceiver(receiver) } -
Statiline registreerimine:
- Deklareeritud manifestifailis (
AndroidManifest.xml). - Elab kauem kui komponendi elutsükkel, mis selle registreeris. Võib saada sõnumeid isegi siis, kui rakendus ei ole aktiivne (mõnede tegevuste puhul, piirangutega viimastes Androidi versioonides).
- Kasutatakse süsteemsete sündmuste jaoks, mida tuleb pidevalt vastu võtta (näiteks seadme käivitamisel).
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.yourapp"> <application ...> <receiver android:name=".MyBroadcastReceiver" android:exported="true"> <!-- Oluline Android 12+ jaoks --> <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED" /> <action android:name="android.intent.action.AIRPLANE_MODE" /> <!-- Muud tegevused --> </intent-filter> </receiver> ... </application> </manifest>// BroadcastReceiver klass class MyBroadcastReceiver : BroadcastReceiver() { override fun onReceive(context: Context?, intent: Intent?) { // Saadud sõnumi töötlemine intent?.action?.let { action -> when (action) { Intent.ACTION_BOOT_COMPLETED -> { // Käivituse lõpetamise töötlemine } Intent.ACTION_AIRPLANE_MODE_CHANGED -> { // Lennuki režiimi muutmise töötlemine } // Muud tegevused } } } } - Deklareeritud manifestifailis (