Conexão com a Internet no emulador android sempre exibe estado conectado

? ganesh @ | Original: StackOverFlow

oi Eu tentei de várias maneiras para verificar a conexão de Internet no meu emulador 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());  
        } 

mesmo se eu desativar o acesso à Internet em meu sistema, o meu código parece exibir estado Connected assim que eu imaginei isso pode 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");

    } 

mas o código acima também exibe mesmo quando eu desconecte os cabos de conexão da Internet " presente" . .Por Favor ajuda para encontrar uma maneira correta de fazer isso .I ter ACCESS_NETWORK_STATE e permissão INTERNET no meu arquivo de manifesto

Top 5 Responder

1breakingart.com @

1 desconectar os cabos de internet é irrelevante. Use F8 para desligar / ligar internet no emulador

2 No primeiro código essa lógica está errada :

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

It should be:

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

Se você usar ||, então este é o resultado: a) quando Informação é nulo, info.isConnected () irá falhar b) quando Informação não é nulo, você sempre irá mostrar Estado Connected

No entanto, mesmo se você consertar isso, o código não vai ser completamente correto ( ver 4)

3 No segundo código, essa lógica está errada :

 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");

    } 

P Que? Porque há mais estados do que ligado e desligado .

No entanto, mesmo se você consertar isso, o código não vai ser completamente correto ( ver 4)

4 Isso funciona no emulador e dispositivos.

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

Observe o uso de isAvailable - sem este isConnected pode retornar TRUE quando WIFI está desativado.

Espero que isto ajude!

2user1023110 @

Na verdade, isso não lhe diz se o emulador está conectado à web via o PC de hospedagem. Se você executá-lo em um PC e sem fio do PC é desligado ele ainda retorna verdade, desde o emulador pensa em seu estado online. A única maneira que eu fui capaz de determinar com certeza se o emulador é realmente on-line é para tentar buscar uma página e ver se ele consegue ou não.