Junior
Comment connecter un BroadcastReceiver pour recevoir des messages sur Android?
sobes.tech IA
Réponse de l'IA
Il existe deux méthodes principales :
-
Enregistrement dynamique :
- S'enregistre et se désenregistre par programmation dans le code.
- Dure tant que l'objet qui l'a enregistré est actif.
- Utilisé pour les événements qui n'ont pas besoin d'être reçus en permanence ou lorsque l'application n'est pas active (par exemple, lors du changement d'orientation, du niveau de batterie).
// Dans une Activity ou un Fragment private val receiver = object : BroadcastReceiver() { override fun onReceive(context: Context?, intent: Intent?) { // Traitement du message reçu intent?.action?.let { action -> when (action) { Intent.ACTION_BATTERY_CHANGED -> { // Traitement du changement de batterie } // Autres actions } } } } override fun onResume() { super.onResume() val intentFilter = IntentFilter().apply { addAction(Intent.ACTION_BATTERY_CHANGED) // Autres actions } registerReceiver(receiver, intentFilter) } override fun onPause() { super.onPause() unregisterReceiver(receiver) } -
Enregistrement statique :
- Déclaré dans le fichier manifeste (
AndroidManifest.xml). - Dure plus longtemps que le cycle de vie du composant qui l'a enregistré. Peut recevoir des messages même lorsque l'application n'est pas active (pour certaines actions, avec des limitations dans les dernières versions d'Android).
- Utilisé pour les événements système qui doivent être reçus en permanence (par exemple, lors du démarrage de l'appareil).
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.yourapp"> <application ...> <receiver android:name=".MyBroadcastReceiver" android:exported="true"> <!-- Important pour Android 12+ --> <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED" /> <action android:name="android.intent.action.AIRPLANE_MODE" /> <!-- Autres actions --> </intent-filter> </receiver> ... </application> </manifest>// Classe BroadcastReceiver class MyBroadcastReceiver : BroadcastReceiver() { override fun onReceive(context: Context?, intent: Intent?) { // Traitement du message reçu intent?.action?.let { action -> when (action) { Intent.ACTION_BOOT_COMPLETED -> { // Traitement à la fin du démarrage } Intent.ACTION_AIRPLANE_MODE_CHANGED -> { // Traitement du changement de mode avion } // Autres actions } } } } - Déclaré dans le fichier manifeste (