App-übergreifender Broadcast-Empfang auf Android

Dies ist ein Beispiel für die App-übergreifende Kommunikation mit dem BroadcastReceiver, einer der vier Hauptkomponenten von Android. Es verwendet zwei separate Projekte, um zu demonstrieren: App1 sendet einen benutzerdefinierten Broadcast, App2 empfängt ihn.

1. Kernkonzepte

Android-Broadcasts sind ein systemweiter Publish/Subscribe-Nachrichtenmechanismus:

  1. Broadcasts können app-übergreifend gesendet und empfangen werden; man kann sowohl benutzerdefinierte Broadcasts als auch System-Broadcasts (wie Boot abgeschlossen, Akkuänderungen, Bildschirmsperre) empfangen.
  2. Testaufbau: Erstellen Sie 2 separate Android-Projekte
    • SendDemo: Die Sender-App, die einen benutzerdefinierten Broadcast sendet.
    • SendDemo2: Die Empfänger-App, die den Broadcast abhört (dieses Projekt auf dem Screenshot).

2. Empfängercode (SendDemo2)

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast;

public class MyBroadCastService extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        // Callback wird bei Broadcast-Empfang ausgelöst; zeigt einen Toast an
        Toast.makeText(context, "Benutzerdefinierten Broadcast 22222 empfangen", Toast.LENGTH_LONG).show();
    }
}
Code-Sprache: JavaScript (javascript)
  • Muss BroadcastReceiver erweitern und onReceive() überschreiben. Diese Methode wird automatisch ausgeführt, wenn ein Broadcast empfangen wird.
  • Hinweis: Führen Sie keine zeitaufwendigen Operationen in onReceive aus, da der Lebenszyklus eines Broadcasts sehr kurz ist.

3. Registrierung des Broadcast Receivers (zwei Methoden)

Methode 1: Statische Registrierung (in AndroidManifest.xml registrieren; Empfang auch möglich, wenn die App nicht läuft, aber ab Android 8.0 eingeschränkt)
<receiver android:name=".MyBroadCastService">
    <intent-filter>
        <!-- Aktionskennung; der Sender muss exakt denselben Aktions-String verwenden -->
        <action android:name="com.foxdevelop.MY_CUSTOM_BROADCAST"/>
    </intent-filter>
</receiver>
Code-Sprache: HTML, XML (xml)

Wenn SendDemo den Broadcast sendet, muss die Intent-Aktion auf com.foxdevelop.MY_CUSTOM_BROADCAST gesetzt werden. Beide Seiten müssen übereinstimmen, damit der Broadcast empfangen wird.

Methode 2: Dynamische Registrierung (im Code registrieren; funktioniert nur, während die App läuft)
MyBroadCastService receiver = new MyBroadCastService();
IntentFilter filter = new IntentFilter("com.foxdevelop.MY_CUSTOM_BROADCAST");
registerReceiver(receiver, filter);
Code-Sprache: JavaScript (javascript)

4. Sender (SendDemo) Broadcast-Sende-Code

// App-übergreifenden benutzerdefinierten Broadcast senden
Intent intent = new Intent("com.foxdevelop.MY_CUSTOM_BROADCAST");
sendBroadcast(intent);
Code-Sprache: JavaScript (javascript)

5. Wichtige Hinweise

  1. Ab Android 8.0 (API 26): Statisch registrierte benutzerdefinierte implizite Broadcasts sind eingeschränkt; viele benutzerdefinierte Aktionen werden bei statischer Registrierung nicht empfangen.
    • Lösungen: ① Dynamische Registrierung verwenden; ② Beim Senden des Broadcasts den Paketnamen angeben und einen expliziten Intent verwenden.
  2. Die meisten System-Broadcasts (Netzwerkänderungen, Akku) können weiterhin normal empfangen werden, wenngleich auch einige System-Broadcasts Einschränkungen unterliegen.
  3. App-übergreifende Broadcasts bergen Sicherheitsrisiken; Sie können Berechtigungen festlegen, um das Senden und Empfangen zu steuern.

6. Ablauf zur Laufzeit

  1. Installieren Sie sowohl SendDemo (Sender) als auch SendDemo2 (Empfänger) auf demselben Gerät/Emulator.
  2. Tippen Sie in SendDemo auf eine Schaltfläche, um sendBroadcast mit der Aktion com.foxdevelop.MY_CUSTOM_BROADCAST aufzurufen.
  3. Das System verteilt den Broadcast; jeder BroadcastReceiver, der für diese Aktion registriert ist (MyBroadCastService in SendDemo2), löst sein onReceive aus.
  4. SendDemo2 zeigt einen Toast an: Benutzerdefinierten Broadcast 22222 empfangen.

App-übergreifender Broadcast-Empfang auf Android

Schreibe einen Kommentar

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