Detecta cuándo tu aplicación Android se conecta o desconecta de internet

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.

# android

Cursos recomendados

Curso intensivo de Laravel y Android

Laravel y Android

Curso intensivo que incluye el desarrollo de una API, su consumo, y autenticación vía JWT. También vemos Kotlin desde 0.

Ingresar al curso
Curso básico de Python y Chatbot Messenger

Aprende Python

Desarrolla tu primer Chatbot para Facebook Messenger sobre Google Cloud, y aprende Python en el camino!

Ingresar al curso
Curso práctico de Javascript

Aprende Javascript

Domina JS con este curso práctico y completo! Fundamentos, ejemplos reales, ES6+, POO, Ajax, Webpack, NPM y más.

Ingresar al curso
Logo de Programación y más

¿Tienes alguna duda?

Si algo no te quedó claro o tienes alguna sugerencia, escribe un comentario aquí debajo.

Además recuerda compartir el post si te resultó de ayuda! 🙂

Cargando comentarios ...

Antes que te vayas

Inscríbete en nuestro curso gratuito de Laravel