¿Cómo se comprueba la conexión a Internet en Android?

Quiero verificar la conectividad a internet en cada actividad. Si se pierde, se debe mostrar un mensaje.

¿Alguien puede guiarme cómo lograr esto?

Puede usar ConnectivityManager para verificar el estado de la red.

ConnectivityManager conMgr = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE); if ( conMgr.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).getState() == NetworkInfo.State.CONNECTED || conMgr.getNetworkInfo(ConnectivityManager.TYPE_WIFI).getState() == NetworkInfo.State.CONNECTED ) { // notify user you are online } else if ( conMgr.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).getState() == NetworkInfo.State.DISCONNECTED || conMgr.getNetworkInfo(ConnectivityManager.TYPE_WIFI).getState() == NetworkInfo.State.DISCONNECTED) { // notify user you are not online } 

Tenga en cuenta que las constantes ConnectivityManager.TYPE_MOBILE y ConnectivityManager.TYPE_WIFI representan tipos de conexión y estos dos valores no son exhaustivos. Vea aquí para obtener una lista exhaustiva.


También asegúrese de tener el permiso requerido para monitorear el estado de la red. Debe agregar este permiso a su AndroidManifest.xml:

  

Solo una conexión puede estar activa en cualquier punto. Entonces, una respuesta más simple es:

 final ConnectivityManager conMgr = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); final NetworkInfo activeNetwork = conMgr.getActiveNetworkInfo(); if (activeNetwork != null && activeNetwork.isConnected()) { // notify user you are online } else { // notify user you are not online } 

También atiende cualquier tipo nuevo de red, como ConnectivityManager # TYPE_WIMAX


También asegúrese de tener el permiso requerido para monitorear el estado de la red. Debe agregar este permiso a su AndroidManifest.xml:

  

Puede hacer esto para diversos tipos de estado de la red

 public void checkNetworkStatus(){ final ConnectivityManager connMgr = (ConnectivityManager) this.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() ){ Toast.makeText(this, "Wifi" , Toast.LENGTH_LONG).show(); } else if( mobile.isAvailable() ){ Toast.makeText(this, "Mobile 3G " , Toast.LENGTH_LONG).show(); } else { Toast.makeText(this, "No Network " , Toast.LENGTH_LONG).show(); } } 

Puede verificar la cobertura de red y la disponibilidad de datos de Mobile y wi-fi directamente con

Para disponibilidad de cobertura de red ,

 private boolean isNetworkAvailable() { ConnectivityManager conxMgr = (ConnectivityManager)getSystemService(CONNECTIVITY_SERVICE); NetworkInfo mobileNwInfo = conxMgr.getNetworkInfo(ConnectivityManager.TYPE_MOBILE); NetworkInfo wifiNwInfo = conxMgr.getNetworkInfo(ConnectivityManager.TYPE_WIFI); return ((mobileNwInfo== null ? false : mobileNwInfo.isAvailable()) || (wifiNwInfo == null ? false : wifiNwInfo.isAvailable())); } 

Para disponibilidad de datos si la red está disponible

 private boolean isDataAvailable() { ConnectivityManager conxMgr = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE); NetworkInfo mobileNwInfo = conxMgr.getNetworkInfo(ConnectivityManager.TYPE_MOBILE); NetworkInfo wifiNwInfo = conxMgr.getNetworkInfo(ConnectivityManager.TYPE_WIFI); return ((mobileNwInfo== null? false : mobileNwInfo.isConnected() )|| (wifiNwInfo == null? false : wifiNwInfo.isConnected())); } 

Corrección

 if ( conMgr.getNetworkInfo(0).getState() == NetworkInfo.State.CONNECTED || conMgr.getNetworkInfo(1).getState() == NetworkInfo.State.CONNECTING ) { //notify user you are online } 

debiera ser

 if ( conMgr.getNetworkInfo(0).getState() == NetworkInfo.State.CONNECTED || conMgr.getNetworkInfo(1).getState() == NetworkInfo.State.CONNECTED ) { //notify user you are online } 

Registre un receptor de difusión para manejar CONNECTIVITY_ACTION . Vea este ejemplo completo . Debe actualizar una variable estática ‘connectionAvailable’ que será accesible en todas partes y en todo momento a través de su getter respectivo.

Recuerde declarar el receptor de difusión en el archivo de manifiesto :

      

En el asunto de “verificar cada actividad”, puede estar interesado en usar una actividad base extendida por sus actividades y en administrar la prueba de conectividad y mostrar el mensaje.

Además, tenga en cuenta que el uso de eventos (no encuestas de actividades) será más eficiente.

No está utilizando ConnectivityManager.getNetworkInfo(0).getState() y ConnectivityManager.getNetworkInfo(1).getState() correctamente, en lugar de codificar los valores (1) y (0) use ConnectivityManager.TYPE_WIFI y ConnectivityManager.TYPE_MOBILE

Esta es una verificación booleana para ver si tiene acceso a la red. No determina qué tipo de acceso a la red: móvil, wifi … solo verifica si estás en línea.

 boolean mobileNwInfo = false; ConnectivityManager conxMgr = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE); try { mobileNwInfo = conxMgr.getActiveNetworkInfo().isConnected(); } catch (NullPointerException e) { mobileNwInfo = false; } if ( mobileNwInfo == false ) { // Your code goes here... }