Sobes.tech
Junior

Wie verbindet man einen BroadcastReceiver, um Nachrichten in Android zu empfangen?

sobes.tech KI

Antwort von AI

Es gibt zwei Hauptmethoden:

  1. Dynamische Registrierung:

    • Wird programmatisch im Code registriert und abgemeldet.
    • Bleibt so lange aktiv, wie das Objekt, das es registriert hat.
    • Wird für Ereignisse verwendet, die nicht ständig empfangen werden müssen oder wenn die Anwendung nicht aktiv ist (z.B. bei Änderung der Orientierung, Batteriestand).
    // In Activity oder Fragment
    private val receiver = object : BroadcastReceiver() {
        override fun onReceive(context: Context?, intent: Intent?) {
            // Verarbeitung der empfangenen Nachricht
            intent?.action?.let { action ->
                when (action) {
                    Intent.ACTION_BATTERY_CHANGED -> {
                        // Verarbeitung der Batteriewechsel
                    }
                    // Weitere Aktionen
                }
            }
        }
    }
    
    override fun onResume() {
        super.onResume()
        val intentFilter = IntentFilter().apply {
            addAction(Intent.ACTION_BATTERY_CHANGED)
            // Weitere Aktionen
        }
        registerReceiver(receiver, intentFilter)
    }
    
    override fun onPause() {
        super.onPause()
        unregisterReceiver(receiver)
    }
    
  2. Statische Registrierung:

    • Wird in der Manifest-Datei (AndroidManifest.xml) deklariert.
    • Lebt länger als der Lebenszyklus der Komponente, die sie registriert hat. Kann Nachrichten auch empfangen, wenn die Anwendung nicht aktiv ist (bei einigen Aktionen, mit Einschränkungen in den neuesten Android-Versionen).
    • Wird für Systemereignisse verwendet, die ständig empfangen werden sollen (z.B. beim Start des Geräts).
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
              package="com.example.yourapp">
    
        <application ...>
            <receiver android:name=".MyBroadcastReceiver"
                      android:exported="true"> <!-- Wichtig für Android 12+ -->
                <intent-filter>
                    <action android:name="android.intent.action.BOOT_COMPLETED" />
                    <action android:name="android.intent.action.AIRPLANE_MODE" />
                    <!-- Weitere Aktionen -->
                </intent-filter>
            </receiver>
            ...
        </application>
    </manifest>
    
    // BroadcastReceiver-Klasse
    class MyBroadcastReceiver : BroadcastReceiver() {
        override fun onReceive(context: Context?, intent: Intent?) {
            // Verarbeitung der empfangenen Nachricht
            intent?.action?.let { action ->
                when (action) {
                    Intent.ACTION_BOOT_COMPLETED -> {
                        // Verarbeitung nach Abschluss des Bootvorgangs
                    }
                    Intent.ACTION_AIRPLANE_MODE_CHANGED -> {
                        // Verarbeitung der Änderung des Flugzeugmodus
                    }
                    // Weitere Aktionen
                }
            }
        }
    }