Junior
Hogyan csatlakoztassuk a BroadcastReceiver-t az Androidban az üzenetek fogadásához?
sobes.tech MI
Válasz az MI-től
Két fő módszer létezik:
-
Dinamikus regisztráció:
- Programozottan regisztrálódik és törlődik a kódban.
- Amíg az objektum, amely regisztrálta, aktív, addig él.
- Olyan eseményekhez használják, amelyeket nem kell folyamatosan fogadni, vagy amikor az alkalmazás nem aktív (például orientációváltás, akkumulátor töltöttségi szint változása esetén).
// Activity vagy Fragment-ben private val receiver = object : BroadcastReceiver() { override fun onReceive(context: Context?, intent: Intent?) { // A kapott üzenet feldolgozása intent?.action?.let { action -> when (action) { Intent.ACTION_BATTERY_CHANGED -> { // Az akkumulátor változásának kezelése } // Egyéb műveletek } } } } override fun onResume() { super.onResume() val intentFilter = IntentFilter().apply { addAction(Intent.ACTION_BATTERY_CHANGED) // Egyéb műveletek } registerReceiver(receiver, intentFilter) } override fun onPause() { super.onPause() unregisterReceiver(receiver) } -
Statikus regisztráció:
- A manifest fájlban van deklarálva (
AndroidManifest.xml). - Hosszabb ideig él, mint a regisztráló komponens életciklusa. Még akkor is fogadhat üzeneteket, amikor az alkalmazás nem aktív (bizonyos műveletekhez, de korlátozásokkal az Android legújabb verzióiban).
- Olyan rendszeres eseményekhez használják, amelyeket folyamatosan fogadni kell (például az eszköz indítása esetén).
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.yourapp"> <application ...> <receiver android:name=".MyBroadcastReceiver" android:exported="true"> <!-- Fontos az Android 12+ esetén --> <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED" /> <action android:name="android.intent.action.AIRPLANE_MODE" /> <!-- Egyéb műveletek --> </intent-filter> </receiver> ... </application> </manifest>// BroadcastReceiver osztály class MyBroadcastReceiver : BroadcastReceiver() { override fun onReceive(context: Context?, intent: Intent?) { // A kapott üzenet feldolgozása intent?.action?.let { action -> when (action) { Intent.ACTION_BOOT_COMPLETED -> { // A rendszerindítás befejezésének kezelése } Intent.ACTION_AIRPLANE_MODE_CHANGED -> { // A repülőgép mód változásának kezelése } // Egyéb műveletek } } } } - A manifest fájlban van deklarálva (