Conexión a Internet en el emulador de Android siempre muestra el estado conectado

? ganesh @ | Original: StackOverFlow
---

hola He intentado de muchas maneras para comprobar la conexión a Internet en mi emulador de Android

  ConnectivityManager conMgr = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);  

   NetworkInfo info= conMgr.getActiveNetworkInfo();  

         if(info != null || info.isConnected()) {  
              Log.v("NetworkInfo","Connected State");  
         }  
        else{  
            Log.v("NetworkInfo","Not Connected state");  
            Log.v("Reason",info.getReason());  
        } 

incluso si se deshabilita la conexión a Internet en mi sistema, mi código parece mostrar estado Conectado así que supuse que esto puede funcionar

 if ( conMgr.getNetworkInfo(1).getState() == NetworkInfo.State.CONNECTED
        ||  conMgr.getNetworkInfo(0).getState() == NetworkInfo.State.CONNECTED  ) {

      Log.v("Congr","Connection Present");

    }
    else if ( conMgr.getNetworkInfo(1).getState() == NetworkInfo.State.DISCONNECTED
        ||  conMgr.getNetworkInfo(0).getState() == NetworkInfo.State.DISCONNECTED) {

      Log.v("conMgr"," No Connection");

    } 

pero el código anterior también muestra "Conexión actual " incluso cuando desconecto cables de Internet. Éntrenos en ayuda a encontrar la manera correcta de hacer esto .I tienen ACCESS_NETWORK_STATE y permisos de Internet en mi archivo de manifiesto

---

Top 5 Respuesta

1breakingart.com @

1 Desconexión de los cables del Internet es irrelevante. Utilice F8 para desactivar / en Internet en el emulador

2 En el primer código de esta lógica es incorrecta :

if(info != null || info.isConnected()) {  
              Log.v("NetworkInfo","Connected State");  
         } 

It should be:

if(info != null && info.isConnected()) {  
              Log.v("NetworkInfo","Connected State");  
         } 

Si utiliza || entonces este es el resultado: a) cuando información es nulo, info.isConnected () se bloqueará b ) cuando los datos no es nulo, que siempre se muestre Estado Conectado

Sin embargo, incluso si se fija que el código no será del todo correcta (ver 4 )

3 En el segundo código, esta lógica es incorrecto :

 else if ( conMgr.getNetworkInfo(1).getState() == NetworkInfo.State.DISCONNECTED
        ||  conMgr.getNetworkInfo(0).getState() == NetworkInfo.State.DISCONNECTED) {

      Log.v("conMgr"," No Connection");

    } 

should be:

 else {

      Log.v("conMgr"," No Connection");

    } 

¿Por qué? Debido a que hay más estados que conectar y desconectar .

Sin embargo, incluso si se fija que el código no será del todo correcta (ver 4 )

4 Esto funciona en emulador y dispositivos.

connected = (   conMgr.getActiveNetworkInfo() != null &&
            conMgr.getActiveNetworkInfo().isAvailable() &&
            conMgr.getActiveNetworkInfo().isConnected()   )

Observe el uso de isAvailable - sin esta isConnected puede devolver TRUE cuando WIFI está desactivado .

Espero que esto ayude!

2user1023110 @

En realidad, esto no te dice si el emulador se conecta a la web a través de la PC de alojamiento. Si lo ejecuta en un PC e inalámbrico de la PC está apagada que sigue devolviendo cierto siempre el emulador piensa en su estado en línea. La única manera que he sido capaz de determinar con seguridad si el emulador es realmente en línea es tratar de buscar una página y ver si tiene éxito o no.