Android cómo obtener indican cuando se pierde la conexión a Internet?

Estoy desarrollando una aplicación de Android y quiero obtener una notificación cuando se pierde la conexión a internet (conexión wifi o de datos por paquetes). En mi enfoque puedo obtener el estado de la conexión como:

private boolean isNetworkAvailable() { ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo(); return activeNetworkInfo != null && activeNetworkInfo.isConnected(); } 

Teniendo esto en el Manifiesto:

 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 

¿Cómo puedo ser notificado automáticamente cuando se pierde la conexión?

Para WIFI usted podría registrar un receptor de la difusión como:

 IntentFilter intentFilter = new IntentFilter(); intentFilter.addAction(WifiManager.SUPPLICANT_CONNECTION_CHANGE_ACTION); registerReceiver(broadcastReceiver, intentFilter); 

También puede registrar el receptor en el manifiesto.

Luego en su receptor:

 @Override public void onReceive(Context context, Intent intent) { final String action = intent.getAction(); if (action.equals(WifiManager.SUPPLICANT_CONNECTION_CHANGE_ACTION)) { if (intent.getBooleanExtra(WifiManager.EXTRA_SUPPLICANT_CONNECTED, false)){ //do stuff } else { // wifi connection was lost } } } 

Para cualquier tipo de oyentes de la conexión de datos usted podría utilizar el receptor siguiente registrado como:

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

Y el en su ConnectivityReceiver :

 public class ConnectivityReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { } } 

En el método onReceive podría comprobar si tiene conexión a Internet o no utiliza este artículo de desarrollador .

Utilice el código siguiente:

 import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import classes.NetworkUtil; public class NetworkChangeReceiver extends BroadcastReceiver { @Override public void onReceive(final Context context, final Intent intent) { boolean IsConnected = NetworkUtil.getConnectivityStatusString(context); // Toast in here, you can retrieve other value like String from NetworkUtil // but you need some change in NetworkUtil Class } } 

Y NetworkUtil es:

 package classes; import android.content.Context; import android.net.ConnectivityManager; import android.net.NetworkInfo; public class NetworkUtil { public static int TYPE_WIFI = 1; public static int TYPE_MOBILE = 2; public static int TYPE_NOT_CONNECTED = 0; public static int getConnectivityStatus(Context context) { ConnectivityManager cm = (ConnectivityManager) context .getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo activeNetwork = cm.getActiveNetworkInfo(); if (null != activeNetwork) { if(activeNetwork.getType() == ConnectivityManager.TYPE_WIFI) return TYPE_WIFI; if(activeNetwork.getType() == ConnectivityManager.TYPE_MOBILE) return TYPE_MOBILE; } return TYPE_NOT_CONNECTED; } public static boolean getConnectivityStatusString(Context context) { int conn = NetworkUtil.getConnectivityStatus(context); boolean status = false ; if (conn == NetworkUtil.TYPE_WIFI) { status = true; } else if (conn == NetworkUtil.TYPE_MOBILE) { status = true; } else if (conn == NetworkUtil.TYPE_NOT_CONNECTED) { status = false; } return status; } } 

Y en archivo manifiesto:

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

Y este permiso:

  <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 

Debe configurar un receptor de difusión.

Agregue estos como filtros de intención.

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

Debe utilizar BroadcastReceivers para su requerimiento. Cree un BroadcastReceiver que escuche los cambios de red.

Incase de cualquier cambio en la red que automáticamente el fuego del evento y usted puede realizar sus operaciones con respecto a ella.

  • ¿Puedo usar una sola instancia de AndroidHttpClient para múltiples llamadas simultáneas?
  • Cómo buscar mediante programación la dirección IP externa de un dispositivo sin utilizar host externo?
  • ¿Es posible separar la interfaz de usuario de WebView y los subprocesos HTTP?
  • Cómo utilizar un certificado SSL auto-firmado en Android
  • Android: Detener un servicio Bonjour que se ejecuta después de que el proceso padre se cierre abruptamente
  • No se puede cambiar entre el usb adb al modo tb adb con éxito
  • Volley Android Networking Library
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.