Réception de broadcasts inter-applications sur Android

Ceci est un exemple de communication inter-applications utilisant le BroadcastReceiver, l’un des quatre composants principaux d’Android. Il utilise deux projets indépendants pour démontrer : App1 envoie un broadcast personnalisé, et App2 le reçoit.

1. Concepts clés

Le broadcast Android est un mécanisme système de publication/abonnement de messages :

  1. Les broadcasts peuvent être envoyés et reçus entre applications ; on peut recevoir à la fois des broadcasts personnalisés et des broadcasts système (tels que le démarrage terminé, les changements de batterie, le verrouillage d’écran).
  2. Approche de test : créer 2 projets Android indépendants
    • SendDemo : l’application émettrice qui envoie un broadcast personnalisé.
    • SendDemo2 : l’application réceptrice qui écoute le broadcast (ce projet sur la capture d’écran).

2. Code du récepteur (SendDemo2)

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast;

public class MyBroadCastService extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        // Callback déclenché à la réception du broadcast ; affiche un Toast
        Toast.makeText(context, "Broadcast personnalisé 22222 reçu", Toast.LENGTH_LONG).show();
    }
}
Langage du code : JavaScript (javascript)
  • Doit étendre BroadcastReceiver et redéfinir onReceive(). Cette méthode s’exécute automatiquement à la réception d’un broadcast.
  • Remarque : N’effectuez aucune opération longue dans onReceive, car le cycle de vie d’un broadcast est très court.

3. Enregistrement du Broadcast Receiver (deux méthodes)

Méthode 1 : Enregistrement statique (dans AndroidManifest.xml ; peut recevoir même si l’app n’est pas lancée, mais restreint depuis Android 8.0)
<receiver android:name=".MyBroadCastService">
    <intent-filter>
        <!-- Identifiant d'action ; l'émetteur doit utiliser exactement la même chaîne d'action -->
        <action android:name="com.foxdevelop.MY_CUSTOM_BROADCAST"/>
    </intent-filter>
</receiver>
Langage du code : HTML, XML (xml)

Lorsque SendDemo envoie le broadcast, l’action de l’Intent doit être définie sur com.foxdevelop.MY_CUSTOM_BROADCAST. Les deux actions doivent correspondre pour que la réception fonctionne.

Méthode 2 : Enregistrement dynamique (dans le code ; fonctionne uniquement lorsque l’application est en cours d’exécution)
MyBroadCastService receiver = new MyBroadCastService();
IntentFilter filter = new IntentFilter("com.foxdevelop.MY_CUSTOM_BROADCAST");
registerReceiver(receiver, filter);
Langage du code : JavaScript (javascript)

4. Code d’envoi du broadcast par SendDemo (émetteur)

// Envoyer un broadcast personnalisé inter-applications
Intent intent = new Intent("com.foxdevelop.MY_CUSTOM_BROADCAST");
sendBroadcast(intent);
Langage du code : JavaScript (javascript)

5. Points importants

  1. Depuis Android 8.0 (API 26) : Les broadcasts implicites personnalisés enregistrés de façon statique sont restreints ; de nombreuses actions personnalisées ne seront pas reçues avec un enregistrement statique.
    • Solutions : ① Utiliser l’enregistrement dynamique ; ② Inclure le nom du package lors de l’envoi, en utilisant un Intent explicite.
  2. La plupart des broadcasts système (changements réseau, batterie) peuvent toujours être reçus normalement, bien que certains soient aussi restreints.
  3. Les broadcasts inter-applications présentent des risques de sécurité ; vous pouvez définir des permissions pour contrôler l’envoi et la réception.

6. Déroulement à l’exécution

  1. Installez les deux applications SendDemo (émetteur) et SendDemo2 (récepteur) sur le même appareil/émulateur.
  2. Dans SendDemo, appuyez sur un bouton pour appeler sendBroadcast avec l’action com.foxdevelop.MY_CUSTOM_BROADCAST.
  3. Le système distribue le broadcast ; tout BroadcastReceiver enregistré pour cette action (MyBroadCastService dans SendDemo2) déclenche son onReceive.
  4. SendDemo2 affiche un Toast : Broadcast personnalisé 22222 reçu.

Réception de broadcasts inter-applications sur Android

Laisser un commentaire

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