How can I receive a notification when the device loses network connectivity?
myTelephonyManager=(TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
callStateListener = new PhoneStateListener(){
public void onDataConnectionStateChanged(int state){
switch(state){
case TelephonyManager.DATA_DISCONNECTED:
Log.i("State: ", "Offline");
// String stateString = "Offline";
// Toast.makeText(getApplicationContext(),
// stateString, Toast.LENGTH_LONG).show();
break;
case TelephonyManager.DATA_SUSPENDED:
Log.i("State: ", "IDLE");
// stateString = "Idle";
// Toast.makeText(getApplicationContext(),
// stateString, Toast.LENGTH_LONG).show();
break;
}
}
};
myTelephonyManager.listen(callStateListener,
PhoneStateListener.LISTEN_DATA_CONNECTION_STATE);
The accepted answer didn't work for me (my tablet was connected to WiFi - no 3G). The following code worked for me:
public class ConnectivityChangeReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
System.out.println("*** Action: " + intent.getAction());
if(intent.getAction().equalsIgnoreCase("android.net.conn.CONNECTIVITY_CHANGE")) {
Toast.makeText(context, "Connection changed", Toast.LENGTH_SHORT).show();
}
}
}
and the change to AndroidManifest.xml
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<receiver android:name=".custom.ConnectivityChangeReceiver">
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
</intent-filter>
</receiver>
You might want to consider using a BroadcastReceiver
for ConnectivityManager.CONNECTIVITY_ACTION
instead. From the docs:
A change in network connectivity has occurred. A connection has either been established or lost. The NetworkInfo for the affected network is sent as an extra; it should be consulted to see what kind of connectivity event occurred.
This receiver works for both WiFi and cellular data connectivity, unlike PhoneStateListener.LISTEN_DATA_CONNECTION_STATE
, which will only notify you for changes in cellular networks.
Not sure if this will help but this looks similar...