Junior
Come collegare un BroadcastReceiver per ricevere messaggi su Android?
sobes.tech AI
Risposta dell'AI
Esistono due metodi principali:
-
Registrazione dinamica:
- Si registra e si annulla programmaticamente nel codice.
- Dura finché l'oggetto che lo ha registrato è attivo.
- È usato per eventi che non devono essere ricevuti continuamente o quando l'applicazione non è attiva (ad esempio, durante il cambio di orientamento, livello di batteria).
// In Activity o Fragment private val receiver = object : BroadcastReceiver() { override fun onReceive(context: Context?, intent: Intent?) { // Elaborazione del messaggio ricevuto intent?.action?.let { action -> when (action) { Intent.ACTION_BATTERY_CHANGED -> { // Elaborazione del cambiamento di batteria } // Altre azioni } } } } override fun onResume() { super.onResume() val intentFilter = IntentFilter().apply { addAction(Intent.ACTION_BATTERY_CHANGED) // Altre azioni } registerReceiver(receiver, intentFilter) } override fun onPause() { super.onPause() unregisterReceiver(receiver) } -
Registrazione statica:
- È dichiarata nel file manifest (
AndroidManifest.xml). - Dura più a lungo del ciclo di vita del componente che l'ha registrata. Può ricevere messaggi anche quando l'applicazione non è attiva (per alcune azioni, con limitazioni nelle ultime versioni di Android).
- È usata per eventi di sistema che devono essere ricevuti continuamente (ad esempio, all'avvio del dispositivo).
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.yourapp"> <application ...> <receiver android:name=".MyBroadcastReceiver" android:exported="true"> <!-- Importante per Android 12+ --> <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED" /> <action android:name="android.intent.action.AIRPLANE_MODE" /> <!-- Altre azioni --> </intent-filter> </receiver> ... </application> </manifest>// Classe BroadcastReceiver class MyBroadcastReceiver : BroadcastReceiver() { override fun onReceive(context: Context?, intent: Intent?) { // Elaborazione del messaggio ricevuto intent?.action?.let { action -> when (action) { Intent.ACTION_BOOT_COMPLETED -> { // Elaborazione al completamento dell'avvio } Intent.ACTION_AIRPLANE_MODE_CHANGED -> { // Elaborazione del cambiamento di modalità aereo } // Altre azioni } } } } - È dichiarata nel file manifest (