Saltar al contenido

ConnectivityManager getNetworkInfo (int) obsoleto

este problema se puede resolver de diferentes maneras, pero te mostramos la respuesta más completa para nosotros.

Solución:

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

Actualización de febrero de 2020:

La respuesta aceptada vuelve a quedar obsoleta en 28 (Android P), pero su método de reemplazo solo funciona en 23 (Android M). Para admitir dispositivos más antiguos, escribí una función auxiliar en.

Cómo utilizar:

int type = getConnectionType(getApplicationContext());

Devuelve un int, puedes cambiarlo a enum en tu código:

0: No hay Internet disponible (tal vez en modo avión o en el proceso de unirse a una conexión wi-fi).

1: Celular (datos móviles, 3G / 4G / LTE lo que sea).

2: Wi-Fi.

3: VPN

Puede copiar la versión de Kotlin o Java de la función auxiliar.

Kotlin:

@IntRange(from = 0, to = 3)
fun getConnectionType(context: Context): Int 
    var result = 0 // Returns connection type. 0: none; 1: mobile data; 2: wifi
    val cm = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager?
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) 
        cm?.run 
            cm.getNetworkCapabilities(cm.activeNetwork)?.run 
                if (hasTransport(NetworkCapabilities.TRANSPORT_WIFI)) 
                    result = 2
                 else if (hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR)) 
                    result = 1
                 else if (hasTransport(NetworkCapabilities.TRANSPORT_VPN))
                    result = 3
                
            
        
     else 
        cm?.run 
            cm.activeNetworkInfo?.run 
                if (type == ConnectivityManager.TYPE_WIFI) 
                    result = 2
                 else if (type == ConnectivityManager.TYPE_MOBILE) 
                    result = 1
                 else if(type == ConnectivityManager.TYPE_VPN) 
                    result = 3
                
            
        
    
    return result

Java:

@IntRange(from = 0, to = 3)
public static int getConnectionType(Context context) 
    int result = 0; // Returns connection type. 0: none; 1: mobile data; 2: wifi
    ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) 
        if (cm != null) 
            NetworkCapabilities capabilities = cm.getNetworkCapabilities(cm.getActiveNetwork());
            if (capabilities != null) 
                if (capabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI)) 
                    result = 2;
                 else if (capabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR)) 
                    result = 1;
                 else if (capabilities.hasTransport(NetworkCapabilities.TRANSPORT_VPN)) 
                    result = 3;
                
            
        
     else 
        if (cm != null) 
            NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
            if (activeNetwork != null) 
                // connected to the internet
                if (activeNetwork.getType() == ConnectivityManager.TYPE_WIFI) 
                    result = 2;
                 else if (activeNetwork.getType() == ConnectivityManager.TYPE_MOBILE) 
                    result = 1;
                 else if (activeNetwork.getType() == ConnectivityManager.TYPE_VPN) 
                    result = 3;
                
            
        
    
    return result;

En octubre de 2018, la respuesta aceptada está obsoleta.

getType(), y los tipos en sí, ahora están obsoletos en el nivel de API 28. De Javadoc:

Las personas que llaman deben cambiar a la comprobación de NetworkCapabilities # hasTransport en su lugar con una de las constantes NetworkCapabilities # TRANSPORT *

Para usar NetworkCapabilities, necesitas pasar un Network instancia a la getNetworkCapabilities() método. Para obtener esa instancia, debes llamar getActiveNetwork() que se agregó en el nivel de API 23.

Entonces, creo que por ahora la forma correcta de verificar de manera segura si está conectado a una red Wi-Fi o celular es:

public static boolean isNetworkConnected() 
    final ConnectivityManager cm = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);

    if (cm != null) 
        if (Build.VERSION.SDK_INT < 23) 
            final NetworkInfo ni = cm.getActiveNetworkInfo();

            if (ni != null) 
         else 
            final Network n = cm.getActiveNetwork();

            if (n != null) 
         
    

    return false; 

También puede buscar otros tipos de TRANSPORT, que puede encontrar aquí.

Nota IMPORTANTE: si está conectado a Wi-Fi y a una VPN, entonces su estado actual podría ser TRANSPORT_VPN, por lo que es posible que desee comprobarlo también.

No olvide agregar el siguiente permiso a su archivo AndroidManifest:


Si conservas alguna suspicacia o disposición de arreglar nuestro artículo te mencionamos dejar un paráfrasis y con mucho gusto lo analizaremos.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *