studio networkinfo network isconnectedorconnecting info getnetworkinfo example check android networking android-6.0-marshmallow

networkinfo - network status android studio



Android getAllNetworkInfo() está en desuso. ¿Cuál es la alternativa? (6)

Quiero usar el administrador de conectividad que proporciona el método getAllNetworkInfo () para verificar la disponibilidad de la red en Android. Este método quedó obsoleto en el nivel 23 de API. Y el doc Developer sugiere utilizar getAllNetworks () en su lugar. Intenté pero no recibí las funcionalidades exactas que obtenía de mi código anterior. Por favor, alguien podría guiarme sobre cómo usar el método getAllNetworks (). A continuación está el código que estoy usando:

public boolean isConnectingToInternet(){ ConnectivityManager connectivity = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); if (connectivity != null) { @SuppressWarnings("deprecation") NetworkInfo[] info = connectivity.getAllNetworkInfo(); //use getAllNetworks() instead if (info != null) for (int i = 0; i < info.length; i++) if (info[i].getState() == NetworkInfo.State.CONNECTED) { return true; } } return false; }


Cuando actualizo mi código obsoleto y todavía deseo admitir API hacia atrás. yo uso esto :

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.WANTED API VERSION){ //code }else{ //code }

De esta forma, cada dispositivo usa el código apropiado para ello. Ejemplo:

public class ConnectionDetector { private Context mContext; public ConnectionDetector(Context context) { this.mContext = context; } /** * Checking for all possible internet providers * **/ public boolean isConnectingToInternet() { ConnectivityManager connectivityManager = (ConnectivityManager) mContext.getSystemService(Context.CONNECTIVITY_SERVICE); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { Network[] networks = connectivityManager.getAllNetworks(); NetworkInfo networkInfo; for (Network mNetwork : networks) { networkInfo = connectivityManager.getNetworkInfo(mNetwork); if (networkInfo.getState().equals(NetworkInfo.State.CONNECTED)) { return true; } } }else { if (connectivityManager != null) { //noinspection deprecation NetworkInfo[] info = connectivityManager.getAllNetworkInfo(); if (info != null) { for (NetworkInfo anInfo : info) { if (anInfo.getState() == NetworkInfo.State.CONNECTED) { LogUtils.d("Network", "NETWORKNAME: " + anInfo.getTypeName()); return true; } } } } } Toast.makeText(mContext,mContext.getString(R.string.please_connect_to_internet),Toast.LENGTH_SHORT).show(); return false; } }


He creado utilidades que pueden ayudarte a verificar:

  • Si la red está conectada.
  • Si WiFi está conectado.
  • Si los datos móviles están conectados.

usa una API vieja o nueva dependiendo de la plataforma en ejecución:

import android.annotation.TargetApi; import android.content.Context; import android.net.ConnectivityManager; import android.net.Network; import android.net.NetworkInfo; import android.os.Build; import android.support.annotation.NonNull; public class NetworkUtils { public static boolean isConnected(@NonNull Context context) { ConnectivityManager connMgr = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo networkInfo = connMgr.getActiveNetworkInfo(); return (networkInfo != null && networkInfo.isConnected()); } public static boolean isWifiConnected(@NonNull Context context) { return isConnected(context, ConnectivityManager.TYPE_WIFI); } public static boolean isMobileConnected(@NonNull Context context) { return isConnected(context, ConnectivityManager.TYPE_MOBILE); } private static boolean isConnected(@NonNull Context context, int type) { ConnectivityManager connMgr = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) { NetworkInfo networkInfo = connMgr.getNetworkInfo(type); return networkInfo != null && networkInfo.isConnected(); } else { return isConnected(connMgr, type); } } @TargetApi(Build.VERSION_CODES.LOLLIPOP) private static boolean isConnected(@NonNull ConnectivityManager connMgr, int type) { Network[] networks = connMgr.getAllNetworks(); NetworkInfo networkInfo; for (Network mNetwork : networks) { networkInfo = connMgr.getNetworkInfo(mNetwork); if (networkInfo != null && networkInfo.getType() == type && networkInfo.isConnected()) { return true; } } return false; } }


Intenta seguir el código:

ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); Network[] networks = connectivityManager.getAllNetworks(); NetworkInfo networkInfo; Network network; for (int i = 0; i < networks.length; i++){ network = networks[i]; networkInfo = connectivityManager.getNetworkInfo(network); if ((networkInfo.getType() == ConnectivityManager.TYPE_WIFI) && (networkInfo.getState().equals(NetworkInfo.State.CONNECTED))) { ConnectivityManager.setProcessDefaultNetwork(network); break; } }


Para alguien necesita la versión de Kotlin, (A continuación se muestra el mismo código que Maor Hadad)

fun Context.isNetworkConnected(): Boolean { val manager = getSystemService(Context.CONNECTIVITY_SERVICE) as? ConnectivityManager if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { val allNetworks = manager?.allNetworks?.let { it } ?: return false allNetworks.forEach { network -> val info = manager.getNetworkInfo(network) if (info.state == NetworkInfo.State.CONNECTED) return true } } else { val allNetworkInfo = manager?.allNetworkInfo?.let { it } ?: return false allNetworkInfo.forEach { info -> if (info.state == NetworkInfo.State.CONNECTED) return true } } return false }

Este código es un método de extensión para Contexto.

Escriba este código en cualquier archivo kotlin (.kt), luego puede usar este método en cualquier clase que implemente Contexto (como Actividad).


Prueba este. Es la manera más simple.

public static boolean isNetworkAvailable(Activity activity) { ConnectivityManager connectivity = (ConnectivityManager) activity.getSystemService(Context.CONNECTIVITY_SERVICE); if (connectivity == null) { return false; } 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; } } } } return false; } }


Prueba esto

ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); Network[] networks=cm.getAllNetworks(); if (cm != null) { for (Network netinfo : networks) { NetworkInfo ni = cm.getNetworkInfo(netinfo); if (ni.isConnected() && ni.isAvailable()) { connected = true; } } }