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...

Wake On Lan


Ultimamente mi è capitato di dover accedere dall'ufficio al mio pc senza che nessuno a casa potesse accenderlo... Non so se è capitato a qualcun'altro ma la cosa è abbastanza seccante!
Incentivato da un collega android-maniaco come me ho pensato di scrivere una piccola applicazione Android in grado di risolvere il problema... Router e bios del pc da accendere permettendo.
A breve sarà sul market con l'originalissimo nome di WakeOnLan...