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.