2010-07-16 29 views
31

Aquí, mi dispositivo Android admite wifi y 3G. En un momento determinado, qué red está disponible en este dispositivo. Debido a que mi requisito es cuando 3g está disponible, tengo que cargar una pequeña cantidad de datos. cuando wifi está disponible, hay que cargar toda la información. Entonces, tengo que verificar que la conexión sea wifi o 3g. Por favor, ayúdame. Gracias por adelantado.cómo comprobar la red wifi o 3g está disponible en el dispositivo Android

+0

@govardhan: +1 También tengo este problema. ¿Recibiste alguna respuesta? – Praveen

+1

Eche un vistazo a eso http://stackoverflow.com/questions/2789612/how-can-i-check-whether-an-android-device-is-connected-to-the-web http://stackoverflow.com/questions/3119607/how-to-be-notify-on-wifi-network-status-change http://stackoverflow.com/questions/3211978/how-to-check-internet-connectivity-in-android http://stackoverflow.com/questions/2919414/get-network-type http://stackoverflow.com/search?q = ConnectivityManager – Fedor

+0

Este enlace contiene el código que necesita http://stackoverflow.com/a/9256972/191246. – ccpizza

Respuesta

54

utilizo este:

/** 
* Checks if we have a valid Internet Connection on the device. 
* @param ctx 
* @return True if device has internet 
* 
* Code from: http://www.androidsnippets.org/snippets/131/ 
*/ 
public static boolean haveInternet(Context ctx) { 

    NetworkInfo info = (NetworkInfo) ((ConnectivityManager) ctx 
      .getSystemService(Context.CONNECTIVITY_SERVICE)).getActiveNetworkInfo(); 

    if (info == null || !info.isConnected()) { 
     return false; 
    } 
    if (info.isRoaming()) { 
     // here is the roaming option you can change it if you want to 
     // disable internet while roaming, just return false 
     return false; 
    } 
    return true; 
} 

También es necesario

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

en AndroidMainfest.xml

para obtener el tipo de red puede utilizar este fragmento de código:

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

//mobile 
State mobile = conMan.getNetworkInfo(0).getState(); 

//wifi 
State wifi = conMan.getNetworkInfo(1).getState(); 

y luego usarlo como esa:

if (mobile == NetworkInfo.State.CONNECTED || mobile == NetworkInfo.State.CONNECTING) { 
    //mobile 
} else if (wifi == NetworkInfo.State.CONNECTED || wifi == NetworkInfo.State.CONNECTING) { 
    //wifi 
} 

para obtener el tipo de la red móvil Me gustaría probar TelephonyManager#getNetworkType o NetworkInfo#getSubtypeName

+0

Este código me da error cuando uso esto en una tableta sin sim. –

1

Es necesario añadir a continuación el permiso en el archivo de manifiesto de Android:

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

Después de eso, puede utilizar a continuación las funciones para comprobar wifi o la red móvil está conectada o no

public static boolean isWifiConnected(Context context) { 
     ConnectivityManager connManager = (ConnectivityManager) context 
       .getSystemService(Context.CONNECTIVITY_SERVICE); 
     NetworkInfo netInfo = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI); 
     return ((netInfo != null) && netInfo.isConnected()); 
    } 

public static boolean isMobileConnected(Context context) { 
     ConnectivityManager connManager = (ConnectivityManager) context 
       .getSystemService(Context.CONNECTIVITY_SERVICE); 
     NetworkInfo netInfo = connManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE); 
     return ((netInfo != null) && netInfo.isConnected()); 
    } 

Algunas referencias de developer.android.com son:

  1. https://developer.android.com/reference/android/net/ConnectivityManager.html
  2. https://developer.android.com/reference/android/net/NetworkInfo.html
  3. https://developer.android.com/reference/android/net/ConnectivityManager.html#getActiveNetworkInfo()
0

En primer lugar obtener una referencia a la ConnectivityManager y luego check the Wifi and 3G status del dispositivo. Necesitará el permiso ACCESS_NETWORK_STATE para usar este servicio.

ConnectivityManager connManager = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE); 
    NetworkInfo mWifi = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI); 
    NetworkInfo mMobile = connManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE); 

    if (mWifi.isAvailable() == true) { 
     return "Connected to WiFi"; 
    } else if (mMobile.isAvailable() == true) { 
     return "Connected to Mobile Network"; 
    } else return "No internet Connection" 
0

Puede utilizar este método para comprobar si su conexión a Internet es 2G, 3G o 4G:

public String getNetworkClass(Context context) { 
    TelephonyManager mTelephonyManager = (TelephonyManager) 
     context.getSystemService(Context.TELEPHONY_SERVICE); 
    int networkType = mTelephonyManager.getNetworkType(); 
    switch (networkType) { 
     case TelephonyManager.NETWORK_TYPE_GPRS: 
     case TelephonyManager.NETWORK_TYPE_EDGE: 
     case TelephonyManager.NETWORK_TYPE_CDMA: 
     case TelephonyManager.NETWORK_TYPE_1xRTT: 
     case TelephonyManager.NETWORK_TYPE_IDEN: 
      return "2G"; 
     case TelephonyManager.NETWORK_TYPE_UMTS: 
     case TelephonyManager.NETWORK_TYPE_EVDO_0: 
     case TelephonyManager.NETWORK_TYPE_EVDO_A: 
     case TelephonyManager.NETWORK_TYPE_HSDPA: 
     case TelephonyManager.NETWORK_TYPE_HSUPA: 
     case TelephonyManager.NETWORK_TYPE_HSPA: 
     case TelephonyManager.NETWORK_TYPE_EVDO_B: 
     case TelephonyManager.NETWORK_TYPE_EHRPD: 
     case TelephonyManager.NETWORK_TYPE_HSPAP: 
      return "3G"; 
     case TelephonyManager.NETWORK_TYPE_LTE: 
      return "4G"; 
     default: 
      return "Unknown"; 
    } 
} 

Y el uso siguiente método se puede comprobar si Internet está disponible o no, y obtenga si está accediendo a Internet a través de una red móvil o WiFi:

public String getNetworkType(Context context){ 
    String networkType = null; 
    ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 
    NetworkInfo activeNetwork = connectivityManager.getActiveNetworkInfo(); 
    if (activeNetwork != null) { // connected to the internet 
     if (activeNetwork.getType() == ConnectivityManager.TYPE_WIFI) { 
       networkType = "WiFi"; 
     } else if (activeNetwork.getType() == ConnectivityManager.TYPE_MOBILE) { 
      networkType = "Mobile"; 
     } 
    } else { 
     // not connected to the internet 
    } 
    return networkType; 
} 
Cuestiones relacionadas