Cerca nel blog

mercoledì 2 giugno 2010

Broadcast Receiver

Questo pomeriggio ho approfondito un pò la mia conoscenza dei Broadcast Receiver di Android...
Ma andiamo con ordine... a che servono e cosa sono?
Nel mio caso mi serviva che la mia applicazione ricevesse in tempo reale l'informazione sull'assenza/presenza della rete per notificarlo all'utente ed inibire un button.
Per risolvere il problema è sufficiente creare un android.content.BroadcastReceiver e registrarlo opportunamente.
Ecco lo snippet di codice della classe che riceve gli eventi:

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.net.ConnectivityManager;

public class NetworkStatusReceiver extends BroadcastReceiver {

public interface INetworkStatusListener
{
void NetworkStatusChanged(boolean is_connected);
};
private boolean isNetworkConnected=true;
private INetworkStatusListener statusListener = null;
public NetworkStatusReceiver(INetworkStatusListener listener)
{
statusListener=listener;
}
@Override
public void onReceive(Context context, Intent intent) {
boolean is_connected=!intent.getBooleanExtra(ConnectivityManager.EXTRA_NO_CONNECTIVITY, false);
if (is_connected != isNetworkConnected)
{
isNetworkConnected = is_connected;
statusListener.NetworkStatusChanged(isNetworkConnected);
}
}
public boolean GetNetworkStatus()
{
return isNetworkConnected;
}

}

Anche la registrazione del receiver è semplice:

networkStatusReceiver networkStatusReceiver=new NetworkStatusReceiver(this);

IntentFilter filter=
new IntentFilter(android.net.ConnectivityManager.CONNECTIVITY_ACTION);
registerReceiver(networkStatusReceiver, filter);

In sostanza attraverso il contesto dell'Activity si dice ad Android di inviare le azioni di tipo CONNECTIVITY_ACTION anche al nostro receiver.
Senz'altro molto meglio di controllare a polling...

2 commenti:

  1. Senza offesa, ma i BroadcastReceivers servono anche a molto altro!

    Grazie cmq dell'articolo

    RispondiElimina
  2. Senza offesa, lui all'inizio dice che sta approfondendo la conoscenza quindi non rispondere a sproposito

    RispondiElimina