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 :
- 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).
- 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
BroadcastReceiveret redéfinironReceive(). 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
- 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.
- La plupart des broadcasts système (changements réseau, batterie) peuvent toujours être reçus normalement, bien que certains soient aussi restreints.
- 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
- Installez les deux applications SendDemo (émetteur) et SendDemo2 (récepteur) sur le même appareil/émulateur.
- Dans SendDemo, appuyez sur un bouton pour appeler
sendBroadcastavec l’actioncom.foxdevelop.MY_CUSTOM_BROADCAST. - Le système distribue le broadcast ; tout BroadcastReceiver enregistré pour cette action (MyBroadCastService dans SendDemo2) déclenche son
onReceive. - SendDemo2 affiche un Toast :
Broadcast personnalisé 22222 reçu.
Réception de broadcasts inter-applications sur Android
Previous: Envoyer une diffusion personnalisée
Next: Diffusion ordonnée