Sobes.tech
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:

  1. 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)
    }
    
  2. 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
                }
            }
        }
    }