Tutorials  /  JavaScript

Android BroadcastReceiver Tutorial

Ccentron Redaktion · Juni 2024 ·3 Min. Lesezeit ·JavaScript, 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.
VM

Passende Infrastruktur bei centron

Node-Anwendungen wollen deployt werden: ccloud³ VMs mit vollem Root-Zugriff ab 3,12 € im Monat – oder gleich als Managed Server, wenn der Betrieb nicht bei Ihnen liegen soll. Cloud Server mieten →

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:

Code
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:
Code
<receiver android:name=".ConnectionReceiver">
    <intent-filter>
        <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
    </intent-filter>
</receiver>
    1. Programmgesteuert:
Code
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:

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

Senden von Broadcast-Intents

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

Code
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:

Code
<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:

Code
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:

Code
<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:

Code
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.

Jetzt 200 € Guthaben sichern

Testen Sie Ihr Setup auf ccloud³

Registrieren Sie sich in der ccloud³ und erhalten Sie 200 € Startguthaben für Ihr Projekt – z. B. für eine PostgreSQL-VM mit automatischen Backups.

centron Redaktion Technische Redaktion

Das Redaktionsteam von centron schreibt Anleitungen aus dem Betriebsalltag: getestet auf unserer eigenen Plattform, betrieben im Rechenzentrum in Hallstadt bei Bamberg.

Kategorie JavaScript
Teilen
Noch offene Fragen?

Our team will help you with your specific setup - in German or English, by people who run the platform themselves.

War dieses Tutorial hilfreich?

Your answer is stored anonymously and helps us improve our tutorials.

Kommentare

No comments yet - be the first to ask a question about this tutorial.

Sign in to comment

Comments are open to centron customers. Sign in to your account to ask a question about this tutorial.

Weiterlesen

Das könnte Sie auch interessieren

Jetzt kostenlos anfangen

Melden Sie sich an und erhalten Sie in den ersten 60 Tagen ein Guthaben von 200 € bei centron.

Dieses Werbeangebot gilt nur für neue Konten. Angebot ausschließlich für Gewerbetreibende.

Jetzt loslegen Sales kontaktieren