Dieser Abschnitt baut auf dem vorherigen Thema der dynamischen Registrierung auf und erklärt die statische Registrierung von Broadcast-Receivern. Ziel ist es, einen System-Broadcast beim Hochfahren des Geräts zu empfangen und eine Toast-Nachricht anzuzeigen.
1. Kernunterschiede: Dynamische vs. Statische Registrierung
- Dynamische Registrierung: Der Receiver wird im Code über
registerReceiverregistriert, meist in deronCreate-Methode einer Activity. Die App muss mindestens einmal gestartet worden sein, um Broadcasts zu empfangen; nach dem Schließen der App werden keine Broadcasts mehr empfangen. Registrierung und Aufhebung können manuell gesteuert werden, was sehr flexibel ist. - Statische Registrierung: Der Receiver wird in der
AndroidManifest.xmlmit dem Tag<receiver>deklariert. Die App muss nicht vorab gestartet sein; nach dem Systemstart wird der Receiver automatisch aktiviert, um System-Broadcasts zu empfangen.
2. Vollständige Schritte
① Broadcast-Receiver-Klasse BootCompleteReceiver erstellen
public class BootCompleteReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "Systemstart abgeschlossen", Toast.LENGTH_LONG).show();
}
}
Code-Sprache: PHP (php)
- Erstellung: In Android Studio mit der rechten Maustaste auf das Package klicken → New → Other → Broadcast Receiver.
- Parameter-Erklärung:
Enabled: Legt fest, ob der Receiver aktiviert ist (Häkchen setzen).Exported: Legt fest, ob Broadcasts von außerhalb der App empfangen werden (Häkchen setzen, da der System-Start-Broadcast ein externer Broadcast ist).
Die Angabe von
exported="false"im Manifest, wie in einigen Lehrunterlagen zu sehen, ist falsch. Um System-Broadcasts zu empfangen, mussexported="true"gesetzt werden.
② Berechtigungen in der AndroidManifest.xml hinzufügen
<!-- Berechtigung zum Empfangen des Boot-Completed-Broadcasts -->
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
Code-Sprache: HTML, XML (xml)
③ Receiver und Intent-Filter innerhalb von <application> statisch registrieren
<receiver
android:name=".BootCompleteReceiver"
android:enabled="true"
android:exported="true">
<intent-filter>
<!-- Action für den Systemstart -->
<action android:name="android.intent.action.BOOT_COMPLETED"/>
</intent-filter>
</receiver>
Code-Sprache: HTML, XML (xml)
intent-filter: Deklariert, welche Art von Broadcast der Receiver abhört. Hier wird derBOOT_COMPLETED-Systemstart-Broadcast überwacht.
3. Wichtige Hinweise
Schreiben Sie keine zeitaufwendige Logik in onReceive()! Die
onReceive-Methode des Broadcast-Receivers läuft im Hauptthread, und die Ausführungszeit ist stark begrenzt (ca. 10 Sekunden). Führen Sie dort keine schweren Operationen aus, da das System sonst einen ANR-Fehler (Application Not Responding) auslöst und die App zum Absturz bringt.
Empfohlene Vorgehensweise: Der Receiver sollte nur einfache Auslöser verarbeiten, wie zum Beispiel:
- Eine Benachrichtigung anzeigen.
- Einen Hintergrund-Service starten.
- Eine Activity starten. Komplexe Geschäftslogik sollte an einen Service delegiert werden und nicht direkt in
onReceivegeschrieben werden.
Implementierung eines Boot-Hinweises mittels statischer Registrierung