Android BroadcastReceiver Tutorial

Erfahren Sie, wie Sie mit Android BroadcastReceiver systemweite Ereignisse in Ihrer Anwendung verarbeiten können. Unser Tutorial zeigt Ihnen Schritt für Schritt, wie Sie einen BroadcastReceiver erstellen und registrieren. Starten Sie jetzt und machen Sie Ihre App noch reaktionsfähiger!

Was ist ein Android BroadcastReceiver?

Ein Android BroadcastReceiver ist eine schlafende Komponente, die auf systemweite Broadcast-Ereignisse oder Intents lauscht. Wenn eines dieser Ereignisse auftritt, aktiviert der BroadcastReceiver die Anwendung, indem er entweder eine Statusleistenbenachrichtigung erstellt oder eine Aufgabe ausführt. Im Gegensatz zu Activities hat ein BroadcastReceiver keine Benutzeroberfläche. Er delegiert Aufgaben an Dienste basierend auf den empfangenen Intents.

Wichtige System-Intents

Einige wichtige systemweite Intents sind:

  • android.intent.action.BATTERY_LOW: Zeigt niedrigen Batteriestand an.
  • android.intent.action.BOOT_COMPLETED: Wird nach dem Hochfahren des Systems gesendet.
  • android.intent.action.CALL: Führt einen Anruf aus.
  • android.intent.action.DATE_CHANGED: Datum hat sich geändert.
  • android.intent.action.REBOOT: Gerät wird neu gestartet.
  • android.net.conn.CONNECTIVITY_CHANGE: Netzwerkverbindung wurde geändert oder zurückgesetzt.

BroadcastReceiver in Android einrichten

Um einen BroadcastReceiver einzurichten, sind zwei Schritte erforderlich:

  1. Erstellen eines BroadcastReceivers
  2. Registrieren des BroadcastReceivers

Erstellen eines BroadcastReceivers

Ein Beispiel für die Implementierung eines BroadcastReceivers:

public class MyReceiver extends BroadcastReceiver {
    public MyReceiver() {
    }

    @Override
    public void onReceive(Context context, Intent intent) {
        Toast.makeText(context, "Action: " + intent.getAction(), Toast.LENGTH_SHORT).show();
    }
}

Der BroadcastReceiver ist eine abstrakte Klasse, und die onReceive() Methode wird aufgerufen, wenn ein Ereignis auftritt. Das Intent-Objekt enthält alle zusätzlichen Daten.

Registrieren des BroadcastReceivers

Ein BroadcastReceiver kann auf zwei Arten registriert werden:

    1. In der AndroidManifest.xml:

<receiver android:name=".ConnectionReceiver">
    <intent-filter>
        <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
    </intent-filter>
</receiver>

    1. Programmgesteuert:

IntentFilter filter = new IntentFilter();
filter.addAction("android.net.conn.CONNECTIVITY_CHANGE");

MyReceiver myReceiver = new MyReceiver();
registerReceiver(myReceiver, filter);

Um einen BroadcastReceiver in onStop() oder onPause() der Activity zu deaktivieren, verwenden Sie:

@Override
protected void onPause() {
    unregisterReceiver(myReceiver);
    super.onPause();
}

Senden von Broadcast-Intents

Um einen Intent an alle zugehörigen BroadcastReceiver zu senden:

Intent intent = new Intent();
intent.setAction("com.journaldev.CUSTOM_INTENT");
sendBroadcast(intent);

Vergessen Sie nicht, die oben genannte Aktion im Intent-Filter des Manifests oder programmgesteuert hinzuzufügen.

Beispiel für eine Android-Anwendung

Hier ist ein Beispiel für eine Anwendung, die auf Netzwerkänderungen hört und einen benutzerdefinierten Intent verarbeitet:

activity_main.xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Send Broadcast"
        android:layout_centerVertical="true"
        android:layout_centerHorizontal="true" />
</RelativeLayout>

MainActivity.java:

public class MainActivity extends AppCompatActivity {
    ConnectionReceiver receiver;
    IntentFilter intentFilter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        receiver = new ConnectionReceiver();
        intentFilter = new IntentFilter("com.journaldev.broadcastreceiver.SOME_ACTION");
    }

    @Override
    protected void onResume() {
        super.onResume();
        registerReceiver(receiver, intentFilter);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        unregisterReceiver(receiver);
    }

    public void someMethod(View view) {
        Intent intent = new Intent("com.journaldev.broadcastreceiver.SOME_ACTION");
        sendBroadcast(intent);
    }
}

AndroidManifest.xml:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.journaldev.broadcastreceiver">

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

    <application
        android:allowBackup="true"
        android:label="@string/app_name">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <receiver android:name=".ConnectionReceiver">
            <intent-filter>
                <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
            </intent-filter>
        </receiver>
    </application>
</manifest>

ConnectionReceiver.java:

public class ConnectionReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        if(intent.getAction().equals("com.journaldev.broadcastreceiver.SOME_ACTION"))
            Toast.makeText(context, "SOME_ACTION is received", Toast.LENGTH_LONG).show();
        else {
            ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
            NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
            boolean isConnected = activeNetwork != null && activeNetwork.isConnectedOrConnecting();
            Toast.makeText(context, isConnected ? "Network is connected" : "Network is changed or reconnected", Toast.LENGTH_LONG).show();
        }
    }
}

Schlussfolgerung

Mit diesem Wissen können Sie nun eigene BroadcastReceiver erstellen und in Ihre Android-Anwendungen integrieren. Diese ermöglichen es Ihnen, auf systemweite Ereignisse zu reagieren und entsprechend zu handeln.

 

Kostenlosen Account erstellen

Registrieren Sie sich jetzt und erhalten Sie Zugang zu unseren Cloud Produkten.

Das könnte Sie auch interessieren: