Exemple – Recevoir les diffusions système
1. Concepts de base des diffusions (Broadcast)
1. Que sont les diffusions système
- Android embarque de nombreuses diffusions au niveau système pour signaler les changements d’état du système.
- Diffusions système courantes :
- Batterie faible / variation du niveau de batterie
- Fin du démarrage (
BOOT_COMPLETED) - Changement d’état du réseau (
CONNECTIVITY_CHANGE) - Activation / désactivation du mode avion
- Changement d’heure / fuseau horaire
2. Rôle du récepteur de diffusion
- L’application écoute les diffusions ciblées en enregistrant un récepteur de diffusion.
- Lorsqu’une diffusion arrive, le système appelle automatiquement la méthode
onReceive()du récepteur. - Écrivez la logique métier dans
onReceive().
2. Deux modes d’enregistrement des diffusions
| Critère de comparaison | Enregistrement dynamique (par code) | Enregistrement statique (dans le Manifest) |
|---|---|---|
| Emplacement d’enregistrement | Dans des composants comme Activity / Service | AndroidManifest.xml |
| Cycle de vie | Lié au composant enregistré | Indépendant des composants ; réception possible même si l’appli n’est pas lancée |
| Flexibilité | Élevée, enregistrement / désenregistrement à tout moment | Faible, défini à l’installation |
| Cas d’usage | Diffusions nécessitant la prise en compte du cycle de vie du composant | Diffusions globales, lancement au démarrage, etc. |
| Restrictions sur versions récentes | Aucune restriction particulière | Android 8.0+ impose de nombreuses restrictions sur les diffusions implicites |
Important : L’enregistrement statique pour la diffusion
CONNECTIVITY_CHANGE(changement réseau) est interdit à partir d’Android 7.0. Il faut obligatoirement utiliser l’enregistrement dynamique.
3. Créer un récepteur de diffusion
Étapes de base
- Créer une nouvelle classe qui étend
BroadcastReceiver - Surcharger la méthode
onReceive(Context context, Intent intent) - Implémenter la logique de traitement des diffusions dans
onReceive()
Code
public class MyReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// Traiter la logique de diffusion
}
}Langage du code : PHP (php)
4. Processus complet pour l’enregistrement dynamique
1. Définir les variables membres
private NetworkChangeReceiver networkChangeReceiver;
private IntentFilter intentFilter;Langage du code : PHP (php)
2. Enregistrer dans onCreate()
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
networkChangeReceiver = new NetworkChangeReceiver();
intentFilter = new IntentFilter("android.net.conn.CONNECTIVITY_CHANGE");
registerReceiver(networkChangeReceiver, intentFilter);
}Langage du code : JavaScript (javascript)
3. Se désenregistrer dans onDestroy() (Obligatoire !)
@Override
protected void onDestroy() {
super.onDestroy();
unregisterReceiver(networkChangeReceiver);
}Langage du code : CSS (css)
4. Définir la classe interne du récepteur
class NetworkChangeReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "Le réseau a changé", Toast.LENGTH_LONG).show();
}
}Langage du code : JavaScript (javascript)