1. Eigener Broadcast-Empfänger MyBroadcastReceiver.java
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast;
public class MyBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "Unser eigener Broadcast wurde empfangen", Toast.LENGTH_LONG).show();
}
}
Code-Sprache: JavaScript (javascript)
2. Empfänger in AndroidManifest.xml registrieren (Manifestdatei)
Fügen Sie innerhalb des Tags <application> hinzu:
<receiver
android:name=".MyBroadcastReceiver"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="com.foxdevelop.www.broadcastdemo.MY_BROADCAST" />
</intent-filter>
</receiver>
Code-Sprache: HTML, XML (xml)
Wichtiger Hinweis: Der Name von
action. Die Intent-Zeichenkette beim späteren Versenden des Broadcasts muss exakt mit diesem Wert übereinstimmen
3. activity_main.xml Layout (Schaltfläche)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<Button
android:id="@+id/btn_send"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Broadcast senden"/>
</LinearLayout>
Code-Sprache: HTML, XML (xml)
4. MainActivity.java Haupt-Activity (Broadcast bei Klick auf Schaltfläche versenden)
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import androidx.appcompat.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button button = findViewById(R.id.btn_send);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// Die Action-Zeichenkette muss exakt mit der Action im Manifest übereinstimmen
Intent intent = new Intent("cn.bamn.www.broadcastdemo.MY_BROADCAST");
sendBroadcast(intent);
}
});
}
}
Code-Sprache: JavaScript (javascript)
Normaler Broadcast vs Geordneter Broadcast
- Normaler Broadcast sendBroadcast() Asynchroner Broadcast. Alle Empfänger erhalten ihn nahezu gleichzeitig, ungeordnet und nicht abbrechbar.
- Geordneter Broadcast sendOrderedBroadcast() Empfänger empfangen den Broadcast nacheinander nach Priorität. Frühere Empfänger können mit
abortBroadcast()den Broadcast beenden, nachfolgende Empfänger erhalten ihn nicht.
Fehler aus dem Bild: Activity class ...MainActivity does not exist
Bedeutung des Fehlers: Das System kann die Klasse MainActivity nicht finden
Häufige Ursachen
- Falscher Pfad bei
android:nameder Activity in AndroidManifest.xml (am häufigsten)- Nicht übereinstimmender Paket- und Klassenname, Fehler bei Groß-/Kleinschreibung
- Schreibweise:
android:name=".MainActivity", der Punkt.steht für das aktuelle Anwendungspaket - Prüfverfahren: Halten Sie die Strg-Taste gedrückt und klicken Sie auf den Klassennamen im IDE. Ein Sprung zur Klasse MainActivity bedeutet, dass der Pfad korrekt ist
- Nicht übereinstimmender Paketname: applicationId in build.gradle stimmt nicht mit dem Paketnamen im Manifest überein
- Klassendatei fehlt: MainActivity.java wurde gelöscht / Dateiname falsch (Der Java-Klassenname muss exakt mit dem Dateinamen übereinstimmen, Groß-/Kleinschreibung wird beachtet)
- Kompilierungsproblem: Projektkompilierung fehlgeschlagen, keine Class-Datei erzeugt; Projekt bereinigen und neu erstellen (Build -> Clean Project)
- Groß-/Kleinschreibung:
MainactivityundMainActivitysind zwei verschiedene Klassen, Android unterscheidet Groß- und Kleinschreibung
Einfache Schritte zur Fehlersuche
- Öffnen Sie AndroidManifest.xml und suchen Sie den Start-Activity-Knoten
<activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> - Strg-Taste gedrückt halten und auf
.MainActivityklicken, prüfen ob zum Code gesprungen wird - Kein Sprung möglich →
android:nameauf den korrekten vollständigen Klassennamen ändern - Sprung funktioniert →
Clean Projectausführen, neu erstellen und APK neu installieren
Zusatz: Hinweis für neuere Android-Versionen (API26+): Die statische Registrierung impliziter Broadcasts unterliegt vielen Einschränkungen. Viele systemseitige implizite Broadcasts erlauben keine statische Registrierung. Eigene implizite Broadcasts mit benutzerdefinierter Action sind davon nicht betroffen und funktionieren einwandfrei. Dieses Beispiel lässt sich direkt ausführen.
Eigenen Broadcast versenden