Cómo supervisar el estado de conectividad y la medición de la conexión

Puedes usar el ConnectivityManager para comprobar que tienes conexión a Internet y, en ese caso, determinar de qué tipo es.

Cómo determinar si tienes conexión a Internet

No puedes ejecutar una actualización basada en un recurso de Internet si no estás conectado a Internet. La forma recomendada de programar tareas que requieren conectividad a Internet es mediante WorkManager. Para obtener más información, consulta Cómo programar tareas con WorkManager. También puedes usar el método que se muestra en el siguiente fragmento para consultar de forma interactiva la red activa a fin de determinar si tiene conexión a Internet.

Kotlin

    val cm = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
    val activeNetwork: NetworkInfo? = cm.activeNetworkInfo
    val isConnected: Boolean = activeNetwork?.isConnectedOrConnecting == true
    

Java

    ConnectivityManager cm =
            (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);

    NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
    boolean isConnected = activeNetwork != null &&
                          activeNetwork.isConnectedOrConnecting();
    

Nota: getActiveNetworkInfo() ya no está disponible en Android 10. En su lugar, usa NetworkCallbacks para las apps orientadas a Android 10 (API nivel 29) o versiones posteriores.

Cómo determinar el tipo de conexión a Internet

También puedes determinar el tipo de conexión a Internet que se encuentra disponible.

La conectividad del dispositivo puede ser a través de datos móviles, WiMAX, Wi-Fi y Ethernet. Si consultas el tipo de red activa, como se muestra en el siguiente ejemplo de código, puedes cambiar el comportamiento de tu app según el ancho de banda disponible.

Kotlin

    val cm = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
    val isMetered = cm.isActiveNetworkMetered()
    

Java

    ConnectivityManager cm =
            (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
    boolean isMetered = cm.isActiveNetworkMetered();
    

Nota: Si tu app necesita admitir Android 4.0 (API nivel 15) y versiones anteriores, usa ConnectivityManagerCompat.isActiveNetworkMetered en lugar de ConnectivityManager.isActiveNetworkMetered(). .

Los costos de datos móviles suelen ser significativamente más altos que los costos de Wi-Fi y Ethernet. Cuando usas una conexión de uso medido, debes intentar reducir el consumo de datos de tu app o incluso demorarla hasta que obtengas una conexión no medida.