Android, How to handle change in network (from GPRS to Wi-fi and vice-versa) while polling for data

pankajagarwal picture pankajagarwal · Mar 2, 2011 · Viewed 10.1k times · Source

I use DefaultHttpClient and HttpGet to poll data from server. Now, say a user was in Wi-fi network and moves out of the room. So the phone automatically starts using the 3G network. Are there any call-backs for such change, and how should I handle such changes. Should I start polling again or does the OS take care to make the changes appropriately

Answer

robsf picture robsf · Mar 16, 2011

You can set up a Receiver in your manifest:

<receiver
  android:name=".NetworkChangeReceiver"
  android:label="NetworkChangeReceiver">
  <intent-filter>
    <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
    <action android:name="android.net.wifi.WIFI_STATE_CHANGED" />
  </intent-filter>
</receiver>

And implement the Receiver with something like this:

public class NetworkChangeReceiver extends BroadcastReceiver {

  @Override
  public void onReceive(final Context context, final Intent intent) {
    final ConnectivityManager connMgr = (ConnectivityManager) 
    context.getSystemService(Context.CONNECTIVITY_SERVICE);

    final android.net.NetworkInfo wifi = 
    connMgr.getNetworkInfo(ConnectivityManager.TYPE_WIFI);

    final android.net.NetworkInfo mobile = 
    connMgr.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);

    if (wifi.isAvailable()) {
      //Do something
    if (mobile.isAvailable()) {
      //Do something else
    }
  }
}

If you are keeping a persistent connection it will go down and you have to re-establish it.

If you are scheduling a service and you are not keeping the connection persistent, you will not have problems.