Exemple – Recevoir les diffusions système

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 comparaisonEnregistrement dynamique (par code)Enregistrement statique (dans le Manifest)
Emplacement d’enregistrementDans des composants comme Activity / ServiceAndroidManifest.xml
Cycle de vieLié 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 momentFaible, défini à l’installation
Cas d’usageDiffusions nécessitant la prise en compte du cycle de vie du composantDiffusions globales, lancement au démarrage, etc.
Restrictions sur versions récentesAucune restriction particulièreAndroid 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

  1. Créer une nouvelle classe qui étend BroadcastReceiver
  2. Surcharger la méthode onReceive(Context context, Intent intent)
  3. 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)

Laisser un commentaire

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