2012-04-04 20 views
12

En mi aplicación, que pruebo el emulador, yo uso el siguiente código para comprobar la conexión de red (WIFI):Comprobar conexión de red androide

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

Este método devuelve siempre true, incluso si desactivo la conexión inalámbrica conexión de mi computadora ... ¿Esto es causado por el emulador o es algo más?

Si esta no es la manera correcta de comprobar la conexión de red, ¿cómo puedo hacer eso?

+0

verifique este código después de configurar el emulador en el modo de vuelo – vipin

+0

¿Ha intentado 'isAvailable()' o 'isConnected()'? – olix20

+0

@vipin, En vuelo, devuelve falso en ambas situaciones ... – amp

Respuesta

35

Es mejor (1) estén en el contexto de modo que el cada actividad puede invocar estas funciones, y (2) Convertir esta función estática:

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

devuelve verdadero como antes ... – amp

+0

código es correcto, funcionará bien en cualquier dispositivo – Nishant

+0

Pero tengo que probar en el emulador ... Alguna alternativa ? – amp

6

Para obtener getActiveNetworkInfo() para trabajar lo que necesita agregue lo siguiente al manifiesto.

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

mejor utilizar netInfo.isConnected() en lugar de netInfo.isConnectedOrConnecting

y también tratar este

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

o

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

En mi caso, apagué el Wifi, pero se olvidó de apagar la conectividad de red de datos/móvil. Una vez que hice eso, el código en la publicación original de este hilo funcionó para mí.

Para recapitular:

  1. Vaya a Configuración
  2. Apagar Wifi
  3. vaya a Preferencias-> Uso de datos
  4. Turn Off datos móviles

Settings

Settings->Data Usage

-1

Esta es la forma en que lo puse juntos en un proyecto:

archivo de manifiesto:

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

función estática:

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

Podemos comprobar la conexión a Internet estado conectado usando debajo de la función. Google Android ha actualizado la función de la API de Android para verificar el estado de la red. Ahora en las últimas API de Android, getAllNetworkInfo() está en desuso. pero la función getAllNetworks() solo está permitida para Build.VERSION.SDK_INT> = 21.He escrito el código para todos los casos.

Para verificar la conexión a Internet, puede llamar a esta función.

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; 
} 
Cuestiones relacionadas