Sobes.tech
Junior

Cos'è BroadcastReceiver in Android?

sobes.tech AI

Risposta dell'AI

Questo è un componente che risponde ai messaggi broadcast di sistema o dell'utente. Non ha un'interfaccia utente ed è progettato per eseguire operazioni in background in risposta a eventi specifici.

Caratteristiche principali:

  • Risponde alle intenzioni (Intents) con un'azione (action) specifica.
  • Componente di breve durata, il suo metodo onReceive() viene eseguito in un breve periodo.
  • Non destinato a operazioni lunghe. Se è richiesta un'operazione prolungata, si dovrebbe avviare un Service da onReceive().
  • Può essere registrato staticamente nel manifesto o dinamicamente nel codice.

Esempi di utilizzo:

  • Rispondere a cambiamenti nello stato della rete (android.net.conn.CONNECTIVITY_CHANGE).
  • Rispondere al caricamento del sistema (android.intent.action.BOOT_COMPLETED).
  • Gestire SMS in arrivo.
  • Ricevere messaggi personalizzati inviati da altri componenti dell'applicazione o da altre applicazioni.

Registrazione nel manifesto:

<receiver android:name=".MyBroadcastReceiver"
          android:exported="true"> // exported="true" per permettere ad altre applicazioni di inviare intents
    <intent-filter>
        <action android:name="android.intent.action.BOOT_COMPLETED"/>
    </intent-filter>
</receiver>

Registrazione nel codice:

// In un'Activity o Service
IntentFilter filter = new IntentFilter("com.example.MY_CUSTOM_ACTION");
MyBroadcastReceiver receiver = new MyBroadcastReceiver();
registerReceiver(receiver, filter);

// In onDestroy() o onStop() - è importante annullare la registrazione!
unregisterReceiver(receiver);

Classe BroadcastReceiver:

public class MyBroadcastReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        // Qui viene eseguito il codice al ricevimento dell'Intent
        // Per esempio:
        if ("com.example.MY_CUSTOM_ACTION".equals(intent.getAction())) {
            Toast.makeText(context, "Azione personalizzata ricevuta!", Toast.LENGTH_SHORT).show();
        }
    }
}