Implementierung eines Boot-Hinweises mittels statischer Registrierung

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 registerReceiver registriert, meist in der onCreate-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.xml mit 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, muss exported="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 der BOOT_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:

  1. Eine Benachrichtigung anzeigen.
  2. Einen Hintergrund-Service starten.
  3. Eine Activity starten. Komplexe Geschäftslogik sollte an einen Service delegiert werden und nicht direkt in onReceive geschrieben werden.

Implementierung eines Boot-Hinweises mittels statischer Registrierung

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert