Junior
Wie verbindet man einen BroadcastReceiver, um Nachrichten in Android zu empfangen?
sobes.tech KI
Antwort von AI
Es gibt zwei Hauptmethoden:
-
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) } -
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 } } } } - Wird in der Manifest-Datei (