1. Récepteur de diffusion personnalisé 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, "Diffusion personnalisée reçue", Toast.LENGTH_LONG).show();
}
}
Langage du code : JavaScript (javascript)
2. Enregistrer le récepteur dans AndroidManifest.xml (fichier manifeste)
Ajouter à l’intérieur de la balise <application> :
<receiver
android:name=".MyBroadcastReceiver"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="com.foxdevelop.www.broadcastdemo.MY_BROADCAST" />
</intent-filter>
</receiver>
Langage du code : HTML, XML (xml)
Point clé : Le nom de
action. La chaîne Intent utilisée lors de l’envoi de diffusion ultérieurement doit correspondre exactement à cette valeur
3. Mise en page activity_main.xml (Bouton)
<?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="Envoyer la diffusion"/>
</LinearLayout>
Langage du code : HTML, XML (xml)
4. MainActivity.java Activité principale (Envoyer diffusion au clic sur bouton)
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) {
// La chaîne action doit être identique à celle du manifeste
Intent intent = new Intent("cn.bamn.www.broadcastdemo.MY_BROADCAST");
sendBroadcast(intent);
}
});
}
}
Langage du code : JavaScript (javascript)
Diffusion normale vs Diffusion ordonnée
- Diffusion normale sendBroadcast() Diffusion asynchrone. Tous les récepteurs la reçoivent presque simultanément, sans ordre et ne peut pas être interrompue.
- Diffusion ordonnée sendOrderedBroadcast() Les récepteurs reçoivent la diffusion par ordre de priorité. Les récepteurs précédents peuvent appeler
abortBroadcast()pour arrêter la diffusion, les récepteurs suivants ne la recevront pas.
Erreur sur l’image : Activity class ...MainActivity does not exist
Signification de l’erreur : Le système ne parvient pas à trouver la classe MainActivity
Causes fréquentes
- Chemin incorrect de
android:namepour l’Activity dans AndroidManifest.xml (le plus fréquent)- Incompatibilité nom du package et nom de classe, erreur de casse
- Fonctionnement :
android:name=".MainActivity", le point.signifie sous le package de l’application actuelle - Méthode de vérification : Maintenez Ctrl et cliquez sur le nom de classe dans l’IDE. Si la navigation vers MainActivity fonctionne, le chemin est correct
- Incohérence du nom de package : applicationId dans build.gradle ne correspond pas au nom package du manifeste
- Fichier de classe manquant : MainActivity.java supprimé / nom de fichier erroné (Le nom de classe Java doit correspondre exactement au nom de fichier, sensible à la casse)
- Erreur de compilation : Échec de compilation du projet, fichier class non généré ; nettoyer et reconstruire le projet (Build -> Clean Project)
- Problème de casse :
MainactivityetMainActivitysont deux classes distinctes, Android respecte la casse
Étapes simples de dépannage
- Ouvrir AndroidManifest.xml et localiser le nœud de l’activité de lancement
<activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> - Maintenez Ctrl et cliquez sur
.MainActivitypour tester la navigation dans le code - Impossible de naviguer → Mettre à jour
android:nameavec le nom complet de classe correct - Navigation possible → Exécuter
Clean Project, reconstruire et réinstaller l’apk
Complément : Attention pour les versions récentes d’Android (API26+) : L’enregistrement statique des diffusions implicites est soumis à de nombreuses restrictions. Beaucoup de diffusions implicites système ne peuvent pas être enregistrées statiquement. En revanche, les diffusions implicites avec action personnalisée échappent à cette contrainte et fonctionnent normalement. Cet exemple peut s’exécuter directement.
Envoyer une diffusion personnalisée