Envoyer une diffusion personnalisée

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

  1. Diffusion normale sendBroadcast() Diffusion asynchrone. Tous les récepteurs la reçoivent presque simultanément, sans ordre et ne peut pas être interrompue.
  2. 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

  1. Chemin incorrect de android:name pour 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
  2. Incohérence du nom de package : applicationId dans build.gradle ne correspond pas au nom package du manifeste
  3. 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)
  4. Erreur de compilation : Échec de compilation du projet, fichier class non généré ; nettoyer et reconstruire le projet (Build -> Clean Project)
  5. Problème de casse : Mainactivity et MainActivity sont deux classes distinctes, Android respecte la casse

Étapes simples de dépannage

  1. 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>
  2. Maintenez Ctrl et cliquez sur .MainActivity pour tester la navigation dans le code
  3. Impossible de naviguer → Mettre à jour android:name avec le nom complet de classe correct
  4. 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

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *