cómo verificar la red wifi o 3g está disponible en dispositivos Android

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.

Yo uso esto:

/** * 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 necesitas

  

en AndroidMainfest.xml

Para obtener el tipo de red, puede usar 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 úsalo así:

 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 red móvil, probaría TelephonyManager # getNetworkType o NetworkInfo # getSubtypeName

Debe agregar el permiso siguiente en el archivo de manifiesto de Android:

  

Después de eso, puede usar las funciones a continuación para verificar si la red wifi o 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 ()

Primero obtenga una referencia al ConnectivityManager y luego verifique el estado de Wifi y 3G 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" 

Puede utilizar este método para verificar 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 utilizando el siguiente método puede verificar si Internet está disponible o no , y obtener 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; }