Beispiel – System-Broadcasts empfangen
1. Grundkonzepte von Broadcasts
1. Was sind System-Broadcasts
- Android enthält zahlreiche eingebaute System-Broadcasts, um über Änderungen des Systemzustands zu informieren.
- Häufige System-Broadcasts:
- Niedriger Akkustand / Änderung des Akkustands
- Boot abgeschlossen (
BOOT_COMPLETED) - Netzwerkstatusänderung (
CONNECTIVITY_CHANGE) - Umschalten des Flugmodus
- Zeit / Zeitzonenänderung
2. Aufgabe des BroadcastReceivers
- Apps registrieren einen BroadcastReceiver, um gewünschte Broadcasts zu überwachen.
- Wenn ein Broadcast eintrifft, ruft das System automatisch die Methode
onReceive()des Receivers auf. - Die Geschäftslogik wird innerhalb von
onReceive()implementiert.
2. Zwei Registrierungsarten für Broadcasts
| Vergleichskriterium | Dynamische Registrierung (Code-Registrierung) | Statische Registrierung (Manifest-Registrierung) |
|---|---|---|
| Registrierungsort | In Komponenten wie Activity / Service | AndroidManifest.xml |
| Lebenszyklus | An die registrierte Komponente gebunden | Unabhängig von Komponenten; Empfang auch bei nicht gestarteter App |
| Flexibilität | Hoch, jederzeit registrieren / abmelden | Niedrig, festgelegt bei Installation |
| Einsatzbereich | Broadcasts, die den Komponentenlebenszyklus berücksichtigen müssen | |
| Restriktionen neuerer Android-Versionen | Keine besonderen Einschränkungen | Android 8.0+ hat starke Einschränkungen für implizite Broadcasts |
Wichtig: Die statische Registrierung für den Broadcast
CONNECTIVITY_CHANGE(Netzwerkänderung) ist ab Android 7.0 nicht erlaubt. Es muss die dynamische Registrierung verwendet werden.
3. Einen BroadcastReceiver erstellen
Grundlegende Schritte
- Neue Klasse erstellen, die
BroadcastReceivererweitert - Die Methode
onReceive(Context context, Intent intent)überschreiben - Logik zur Verarbeitung eingehender Broadcasts in
onReceive()schreiben
Code
public class MyReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// Broadcast-Logik verarbeiten
}
}Code-Sprache: PHP (php)
4. Kompletter Ablauf der dynamischen Registrierung
1. Membervariablen definieren
private NetworkChangeReceiver networkChangeReceiver;
private IntentFilter intentFilter;Code-Sprache: PHP (php)
2. Registrierung in onCreate()
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
networkChangeReceiver = new NetworkChangeReceiver();
intentFilter = new IntentFilter("android.net.conn.CONNECTIVITY_CHANGE");
registerReceiver(networkChangeReceiver, intentFilter);
}Code-Sprache: JavaScript (javascript)
3. Abmeldung in onDestroy() (Erforderlich!)
@Override
protected void onDestroy() {
super.onDestroy();
unregisterReceiver(networkChangeReceiver);
}Code-Sprache: CSS (css)
4. Innere Klasse für Receiver definieren
class NetworkChangeReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "Das Netzwerk hat sich geändert", Toast.LENGTH_LONG).show();
}
}Code-Sprache: JavaScript (javascript)