2012-04-04 4 views
12

Nella mia domanda, che ho test sull'emulatore, io uso il codice per controllare la connessione di rete (Wi-Fi) a seguito di:controllare Android

public boolean isOnline() { 
    ConnectivityManager cm = 
     (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
    NetworkInfo netInfo = cm.getActiveNetworkInfo(); 
    if (netInfo != null && netInfo.isConnectedOrConnecting()) { 
     return true; 
    } 
    return false; 
} 

questo metodo restituisce sempre true, anche se disattivo il wireless connessione del mio computer ... Questo è causato dall'emulatore o è qualcos'altro?

Se questo non è il modo giusto per verificare la connessione di rete, come posso farlo?

+0

controllo di questo codice dopo aver impostato emulatore in modalità volo – vipin

+0

hai provato 'isAvailable()' o 'isConnected()'? – olix20

+0

@vipin, In volo restituisce false in entrambe le situazioni ... – amp

risposta

35

E 'meglio (1) passare nel contesto in modo che la ogni attività può invocare queste funzioni, e (2) Trasforma questa funzione statica:

public boolean isNetworkOnline() { 
    boolean status=false; 
    try{ 
     ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
     NetworkInfo netInfo = cm.getNetworkInfo(0); 
     if (netInfo != null && netInfo.getState()==NetworkInfo.State.CONNECTED) { 
      status= true; 
     }else { 
      netInfo = cm.getNetworkInfo(1); 
      if(netInfo!=null && netInfo.getState()==NetworkInfo.State.CONNECTED) 
       status= true; 
     } 
    }catch(Exception e){ 
     e.printStackTrace(); 
     return false; 
    } 
    return status; 

    } 
+0

restituisce true in come prima ... – amp

+0

codice è corretto funzionerà bene su qualsiasi dispositivo – Nishant

+0

Ma ho bisogno di testare l'emulatore ... Alcune alternative ? – amp

6

Per ottenere getActiveNetworkInfo() per lavorare è necessario aggiungi il seguente al manifest.

1. uses-permission android:name="android.permission.INTERNET" 
2. uses-permission 
    android:name="android.permission.ACCESS_NETWORK_STATE" 

meglio usare netInfo.isConnected() piuttosto che netInfo.isConnectedOrConnecting

e anche provare questo

Context.getSystemService(Context.CONNECTIVITY_SERVICE).getNetworkInfo(ConnectivityManager.TYPE_MOBILE) 

o

Context.getSystemService(Context.CONNECTIVITY_SERVICE).requestRouteToHost(TYPE_WIFI, int hostAddress) 
0

Nel mio caso, ho spento il Wifi, ma si è dimenticato di disattivare la connettività di rete Data/Mobile. Una volta che l'ho fatto, il codice nel post originale di questo thread ha funzionato per me.

Per ricapitolare:

  1. Vai a Impostazioni
  2. Disattiva Wifi
  3. Vai a Impostazioni-> i dati di utilizzo
  4. Spegni Mobile Data

Settings

Settings->Data Usage

-1

Ecco come ho messo insieme in un progetto:

file di manifesto:

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

statico Funzione:

public static boolean isNwConnected(Context context) { 
    if (context == null) { 
     return true; 
    } 
    ConnectivityManager connectivityManager = 
     (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 
    NetworkInfo nwInfo = connectivityManager.getActiveNetworkInfo(); 
    if (nwInfo != null && nwInfo.isConnectedOrConnecting()) { 
     return true; 
    } 
    return false; 
} 
0

Siamo in grado di controllare la connessione internet stato collegato tramite sotto la funzione. Google Android ha aggiornato la funzione dell'API Android per controllare lo stato della rete. Ora nelle ultime API di Android, getAllNetworkInfo() è deprecato. ma la funzione getAllNetworks() è consentita solo per Build.VERSION.SDK_INT> = 21. Ho codice scritto per tutti i casi.

Per verificare la connessione Internet, è possibile chiamare questa funzione.

public static boolean checkInternetConnection(Context context) { 
     ConnectivityManager connectivity = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 
     if (connectivity == null) { 
     return false; 
    } else if(Build.VERSION.SDK_INT >= 21){ 
     Network[] info = connectivity.getAllNetworks(); 
     if (info != null) { 
      for (int i = 0; i < info.length; i++) { 
       if (info[i] != null && connectivity.getNetworkInfo(info[i]).isConnected()) { 
        return true; 
       } 
      } 
     } 
    } else { 
     NetworkInfo[] info = connectivity.getAllNetworkInfo(); 
     if (info != null) { 
      for (int i = 0; i < info.length; i++) { 
       if (info[i].getState() == NetworkInfo.State.CONNECTED) { 
        return true; 
       } 
      } 
     } 
     final NetworkInfo activeNetwork = connectivity.getActiveNetworkInfo(); 
     if (activeNetwork != null && activeNetwork.isConnected()) { 
      return true; 
     } 
    } 

    return false; 
} 
Problemi correlati