Connessione a Internet in emulatore di Android visualizza sempre stato di connessione

? ganesh @ | Original: StackOverFlow

ciao Ho provato in molti modi per controllare la connessione a Internet nel mio emulatore 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());  
        } 

anche se i disattivare la connessione a Internet nel mio sistema, il mio codice sembra per visualizzare lo stato Connesso così ho immaginato questo può funzionare

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

    } 

ma il codice sopra mostra anche " collegamento attuale " anche quando ho scollegare i cavi di Internet . Aiuto favore, ricordatevi di trovare un modo corretto di fare questo .I hanno ACCESS_NETWORK_STATE e l'autorizzazione INTERNET nel mio file manifest

Top 5 Risposta

1breakingart.com @

1 Scollegare cavi internet è irrilevante . Utilizzare F8 per spegnere / su internet nell'emulatore

2 Nel primo codice di questa logica è sbagliata :

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

It should be:

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

Se si utilizza || allora questo è il risultato : a) quando informazioni è nullo, info.isConnected ( ) sarà in crash b) quando informazioni non è nullo, si mostrerà sempre stato Connected

Tuttavia, anche se si fissa che, il codice non sarà completamente corretta ( vedi 4 )

3 Nel secondo codice, questa logica è sbagliato :

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

    } 

Come Mai? Perché ci sono più stati di collegare e scollegare .

Tuttavia, anche se si fissa che, il codice non sarà completamente corretta ( vedi 4 )

4 Questo funziona su emulatore e dispositivi .

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

Si noti l'uso di isAvailable - senza questo isConnected può restituire TRUE quando WIFI è disabilitato .

Spero che sia di aiuto!

2user1023110 @

In realtà, questo non dice se l'emulatore è collegato al web tramite il PC che ospita . Se si esegue su un PC e wireless del PC è spento restituisce ancora vero finché l'emulatore pensa la sua in stato in linea . L'unico modo sono stato in grado di determinare con certezza se l'emulatore è davvero online è quello di cercare di recuperare una pagina e vedere se riesce o no .