Broadcasting bedeutet das Senden an alle interessierten Empfänger so wie beim Radio oder Fernsehen.
- System Broadcasts dienen der Kommunikation zwischen Android und der App. Damit meldet beispielsweise das System, dass der Akku zur Neige geht (BATTERY_LOW).
- Custom Broadcasts werden von Apps genutzt, um mit anderen Apps zu kommunizieren.
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>