Detecta cuándo tu aplicación Android se conecta o desconecta de internet
Tiempo de lectura: 1.14 minutos
Hoy veremos cómo DETECTAR los cambios de estado, de la conexión a Internet en tus proyectos Android.
Introducción
Una aplicación que funciona de modo online, consume y registra datos a través de una API.
Todo bien.
¿Pero qué pasa si el dispositivo se queda sin internet?
Es una buena práctica que nuestras aplicaciones continúen funcionando incluso sin una conexión a internet.
De hecho sería ideal que los datos se sincronicen cuando el internet vuelva a estar disponible.
Entonces, para que nuestra app funcione de modo offline tenemos que:
- Definir una la lógica a seguir,
- sobre en qué momento y cómo sincronizar los datos.
Eso es un tema que podemos ver en otro post con más detalle.
Por ahora lo importante es detectar el instante en que un dispositivo obtiene acceso a internet (o pierde acceso a internet).
¿Cómo lo hacemos?
Existen muchas formas de lograrlo.
En este caso vamos a seguir uno de los métodos más sencillos.
- Primero vamos a solicitar el permiso
ACCESS_NETWORK_STATE
en nuestro manifest. - Vamos a crear un
BroadcastReceiver
en el Activity donde queremos detectar el cambio de estado. - Vamos a registrar y des-registrar este
BroadcastReceiver
según el ciclo de vida de nuestro Activity (así dejamos de escuchar cambios de estado si el Activity se ha cerrado o no está activo).
NOTA: El permiso para verificar el estado es independiente al permiso de INTERNET
.
Código de ejemplo en Java
private BroadcastReceiver networkStateReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
ConnectivityManager manager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo ni = manager.getActiveNetworkInfo();
onNetworkChange(ni);
}
};
@Override
public void onResume() {
super.onResume();
registerReceiver(networkStateReceiver, new IntentFilter(android.net.ConnectivityManager.CONNECTIVITY_ACTION));
}
@Override
public void onPause() {
unregisterReceiver(networkStateReceiver);
super.onPause();
}
private void onNetworkChange(NetworkInfo networkInfo) {
if (networkInfo != null) {
if (networkInfo.getState() == NetworkInfo.State.CONNECTED) {
// CONNECTED
} else {
// DISCONNECTED"
}
}
}
Y eso es todo amigos.
Si de pronto quieren una versión para Kotlin pueden ver este ejemplo que recientemente publiqué en StackOverflow.