ConnectivityManager getNetworkInfo (int) obsoleto

Usando compileSdkVersion 23, sin embargo, tratando de admitir desde 9.

getNetworkInfo (int) quedó obsoleto en 23. La sugerencia fue usar getAllNetworks y getNetworkInfo (Network) en su lugar. Sin embargo, ambos requieren un mínimo de API 21.

¿Hay alguna clase que podamos usar en el paquete de soporte que pueda ayudar con esto?

Sé que se propuso una solución antes , sin embargo, el desafío de mis requerimientos mínimos de api de 9 plantea un problema.

Puedes usar:

getActiveNetworkInfo ();

ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo activeNetwork = cm.getActiveNetworkInfo(); if (activeNetwork != null) { // connected to the internet if (activeNetwork.getType() == ConnectivityManager.TYPE_WIFI) { // connected to wifi } else if (activeNetwork.getType() == ConnectivityManager.TYPE_MOBILE) { // connected to mobile data } } else { // not connected to the internet } 

O en una caja de interruptor

  ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo activeNetwork = cm.getActiveNetworkInfo(); if (activeNetwork != null) { // connected to the internet switch (activeNetwork.getType()) { case ConnectivityManager.TYPE_WIFI: // connected to wifi break; case ConnectivityManager.TYPE_MOBILE: // connected to mobile data break; default: break; } } else { // not connected to the internet } 

Respuesta actualizada (19: 07: 2018):

Este método lo ayudará a verificar si la conexión a Internet está disponible.

 public static boolean isNetworkAvailable(Context context) { ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); if (connectivityManager != null) { NetworkInfo activeNetwork = connectivityManager.getActiveNetworkInfo(); return (activeNetwork != null && activeNetwork.isConnectedOrConnecting()); } else { return false; } } 

Respuesta anterior:

Para la mejor práctica de reutilización de códigos, improvisar la respuesta del pan de queso.

 public static boolean isNetworkAvailable(Context context) { int[] networkTypes = {ConnectivityManager.TYPE_MOBILE, ConnectivityManager.TYPE_WIFI}; try { ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); for (int networkType : networkTypes) { NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo(); if (activeNetworkInfo != null && activeNetworkInfo.getType() == networkType) return true; } } catch (Exception e) { return false; } return false; } 

El código se puede colocar en la clase Util y se puede usar para verificar si el teléfono está conectado a Internet a través de WiFi o Internet móvil desde cualquier parte de la aplicación.

Recuerde poner

  

en archivo Manifiesto con las respuestas anteriores.

Como se sugirió Cheese Bread, use getActiveNetworkInfo ()

getActiveNetworkInfo

Agregado en el nivel de API 1

NetworkInfo getActiveNetworkInfo ()

Devuelve detalles sobre la red de datos predeterminada actualmente activa. Cuando está conectado, esta red es la ruta predeterminada para las conexiones salientes. Siempre debe verificar isConnected () antes de iniciar el tráfico de red. Esto puede devolver nulo cuando no hay una red predeterminada. Este método requiere que la persona que llama tenga el permiso ACCESS_NETWORK_STATE. Devuelve NetworkInfo un objeto NetworkInfo para la red predeterminada actual o nulo si no hay una red predeterminada actualmente activa.

Referencia: Android Studio

  public final boolean isInternetOn() { // get Connectivity Manager object to check connection ConnectivityManager connec = (ConnectivityManager)getSystemService(getBaseContext().CONNECTIVITY_SERVICE); // Check for network connections if ( connec.getActiveNetworkInfo().getState() == android.net.NetworkInfo.State.CONNECTED || connec.getActiveNetworkInfo().getState() == android.net.NetworkInfo.State.CONNECTING ) { // if connected with internet Toast.makeText(this, connec.getActiveNetworkInfo().getTypeName(), Toast.LENGTH_LONG).show(); return true; } else if ( connec.getActiveNetworkInfo().getState() == android.net.NetworkInfo.State.DISCONNECTED || connec.getActiveNetworkInfo().getState() == android.net.NetworkInfo.State.DISCONNECTED ) { Toast.makeText(this, " Not Connected ", Toast.LENGTH_LONG).show(); return false; } return false; } 

ahora llame al método, para un uso seguro intente capturar

  try { if(isInternetOn()){ //connected actions } else{ //not connected actions } }catch (Exception e){ Toast.makeText(this, e.getMessage(), Toast.LENGTH_SHORT).show(); } 

Y no te olvides de agregar:

   

Con el fin de estar en el lado seguro, sugeriría utilizar también el método

NetworkInfo.isConnected ()

El método completo podría ser el siguiente:

 /** * Checking whether network is connected * @param context Context to get {@link ConnectivityManager} * @return true if Network is connected, else false */ public static boolean isConnected(Context context){ ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo activeNetwork = cm.getActiveNetworkInfo(); if (activeNetwork != null && activeNetwork.isConnected()) { int networkType = activeNetwork.getType(); return networkType == ConnectivityManager.TYPE_WIFI || networkType == ConnectivityManager.TYPE_MOBILE; } else { return false; } } 

Versión de Kotlin:

 fun isInternetOn(context: Context): Boolean { val cm = context.getSystemService(Context.CONNECTIVITY_SERVICE) as? ConnectivityManager val activeNetwork = cm?.activeNetworkInfo return activeNetwork != null && activeNetwork.isConnected } 
    Intereting Posts