Android-Programmierung: Broadcast
Willemers Informatik-Ecke

Broadcasting bedeutet das Senden an alle interessierten Empfänger so wie beim Radio oder Fernsehen.

Broadcast Message

Die Broadcast Message wird in einer Intent verpackt.

Broadcast Receiver

Eine App kann als Broadcast Receiver agieren und sich für den Empfang aller Broadcasts anmelden.

Erstellen eines Broadcast-Receivers

Um den Broadcast im Programm auszuwerten, wird die Klasse BroadcastReceiver erweitert. Anschließend wird die Methode onReceive überschrieben. Diese erhält in den Parametern eine Referenz auf den Context und das Intent, das die eigentliche Nachricht enthält. Das folgende Beispiel aus der Android-Dokumentation packt die Broadcast-Message aus und gibt sie im Log als auch als Toast dar.
public class MyBroadcastReceiver extends BroadcastReceiver {
    private static final String TAG = "MyBroadcastReceiver";

    @Override
    public void onReceive(Context context, Intent intent) {
        StringBuilder sb = new StringBuilder();
        sb.append("Action: " + intent.getAction() + "\n");
        sb.append("URI: " + intent.toUri(Intent.URI_INTENT_SCHEME).toString() + "\n");
        String log = sb.toString();
        Log.d(TAG, log);
        Toast.makeText(context, log, Toast.LENGTH_LONG).show();
    }
}
Für die Verarbeitung von onReceive sollte man sich nicht beliebig Zeit lassen. Android kann ansonsten den Broadcast-Receiver nach 10 Sekunden beenden, um das System geschmeidig zu erhalten.

Anmeldung aus dem Programm heraus

Um den Broadcast-Receiver anzumelden, wird dessen Referenz benötigt. Zusätzlich wird ein Filter für die gewünschte Broadcast-Message angelegt. Beides wird beim Aufruf von registerReceiver als Parameter übergeben.
BroadcastReceiver br = new MyBroadcastReceiver();
IntentFilter filter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION);
filter.addAction(Intent.ACTION_AIRPLANE_MODE_CHANGED);
this.registerReceiver(br, filter);

Anmeldung per Manifest

Ein Anmeldung als Broadcast Receiver kann auch durch Registrierung im Manifest erfolgen, wird aber seit Android 8.0 eingeschränkt.

Die Anmeldung im Manifest erfolgt durch einen receiver-Eintrag. Im zugehörigen Filter wird angegeben, welche Broadcasts empfangen werden sollen. Der folgende Eintrag empfängt Nachrichten der Art BOOT_COMPLETED und INPUT_METHOD_CHANGED.

<receiver android:name=".MyBroadcastReceiver"  android:exported="true">
    <intent-filter>
        <action android:name="android.intent.action.BOOT_COMPLETED"/>
        <action android:name="android.intent.action.INPUT_METHOD_CHANGED" />
    </intent-filter>
</receiver>

Quelle: