Junior
Kaip prijungti BroadcastReceiver, kad gauti pranešimus Android?
sobes.tech AI
Atsakymas iš AI
Yra du pagrindiniai būdai:
-
Dinaminė registracija:
- Registruojama ir atšaukiama programiškai kode.
- Gyvena tol, kol aktyvus objektas, kuris ją registravo.
- Naudojama įvykiams, kurių nereikia nuolat gauti arba kai programa nėra aktyvi (pavyzdžiui, keičiant orientaciją, baterijos įkrovimo lygį).
// Activity arba Fragment'e private val receiver = object : BroadcastReceiver() { override fun onReceive(context: Context?, intent: Intent?) { // Gauto pranešimo apdorojimas intent?.action?.let { action -> when (action) { Intent.ACTION_BATTERY_CHANGED -> { // Baterijos pokyčių apdorojimas } // Kitos veiksmai } } } } override fun onResume() { super.onResume() val intentFilter = IntentFilter().apply { addAction(Intent.ACTION_BATTERY_CHANGED) // Kiti veiksmai } registerReceiver(receiver, intentFilter) } override fun onPause() { super.onPause() unregisterReceiver(receiver) } -
Statinė registracija:
- Deklaruojama manifeste (
AndroidManifest.xml). - Gyvena ilgiau nei komponento gyvavimo ciklas, kuris ją registravo. Gali gauti pranešimus net kai programa nėra aktyvi (kai kurioms veikloms, su apribojimais naujausiose Android versijose).
- Naudojama sisteminiams įvykiams, kuriuos reikia nuolat gauti (pavyzdžiui, įrenginio įkrovimo metu).
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.yourapp"> <application ...> <receiver android:name=".MyBroadcastReceiver" android:exported="true"> <!-- Svarbu Android 12+ --> <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED" /> <action android:name="android.intent.action.AIRPLANE_MODE" /> <!-- Kiti veiksmai --> </intent-filter> </receiver> ... </application> </manifest>// BroadcastReceiver klasė class MyBroadcastReceiver : BroadcastReceiver() { override fun onReceive(context: Context?, intent: Intent?) { // Gauto pranešimo apdorojimas intent?.action?.let { action -> when (action) { Intent.ACTION_BOOT_COMPLETED -> { // Baigimo apdorojimas } Intent.ACTION_AIRPLANE_MODE_CHANGED -> { // Keičiamo režimo apdorojimas } // Kitos veiksmai } } } } - Deklaruojama manifeste (