Eigenen Broadcast versenden

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

  1. Normaler Broadcast sendBroadcast() Asynchroner Broadcast. Alle Empfänger erhalten ihn nahezu gleichzeitig, ungeordnet und nicht abbrechbar.
  2. 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

  1. Falscher Pfad bei android:name der 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
  2. Nicht übereinstimmender Paketname: applicationId in build.gradle stimmt nicht mit dem Paketnamen im Manifest überein
  3. Klassendatei fehlt: MainActivity.java wurde gelöscht / Dateiname falsch (Der Java-Klassenname muss exakt mit dem Dateinamen übereinstimmen, Groß-/Kleinschreibung wird beachtet)
  4. Kompilierungsproblem: Projektkompilierung fehlgeschlagen, keine Class-Datei erzeugt; Projekt bereinigen und neu erstellen (Build -> Clean Project)
  5. Groß-/Kleinschreibung: Mainactivity und MainActivity sind zwei verschiedene Klassen, Android unterscheidet Groß- und Kleinschreibung

Einfache Schritte zur Fehlersuche

  1. Ö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>
  2. Strg-Taste gedrückt halten und auf .MainActivity klicken, prüfen ob zum Code gesprungen wird
  3. Kein Sprung möglich → android:name auf den korrekten vollständigen Klassennamen ändern
  4. Sprung funktioniert → Clean Project ausfü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

Schreibe einen Kommentar

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