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

Logo de Programación y más

Comparte este post si te fue de ayuda 🙂.

Regístrate

Accede a todos los cursos, y resuelve todas tus dudas.

Cursos Recomendados

Imagen para el curso Laravel y Android

Laravel y Android

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

Iniciar curso
Imagen para el curso Docker y Microservicios

Docker y Microservicios

Aprende por qué es importante y cómo funciona Docker, con este nuevo curso práctico!

Iniciar curso
Imagen para el curso Aprende Python

Aprende Python

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

Iniciar curso

Espera un momento ...

¿Te gustaría llevar mi curso de Laravel, gratis?

Sólo debes ingresar tus datos: