Supervisión por difusión de conexión / desconexión de red en Android

Esta es la implementación de la API antigua de Android (Android 7 y versiones anteriores), usando BroadcastReceiver + ConnectivityManager + NetworkInfo para detectar la conexión y desconexión de red.

1. Conceptos clave

  1. ConnectivityManager: Clase de servicio de sistema dedicada a gestionar el estado de conexión de red.
  2. Permisos: Debe agregar el permiso de estado de red en AndroidManifest.xml
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
Lenguaje del código: HTML, XML (xml)
  1. Principio: Cuando ocurre un cambio de red, el sistema envía difusiones de red. Dentro del callback onReceive de BroadcastReceiver, usa ConnectivityManager para obtener la información actual de red y saber si la red está conectada o desconectada.

2. Código completo de onReceive

public void onReceive(Context context, Intent intent) {
    // Obtener servicio de sistema de gestión de red
    ConnectivityManager connectivityManager =
            (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
    // Obtener información de red activa (API obsoleta)
    NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();
    if (networkInfo != null) {
        if (networkInfo.isAvailable()) {
            Toast.makeText(context, "Red conectada", Toast.LENGTH_LONG).show();
        } else {
            Toast.makeText(context, "Red desconectada", Toast.LENGTH_LONG).show();
        }
    } else {
        // networkInfo es null, no hay red
        Toast.makeText(context, "Red desconectada", Toast.LENGTH_LONG).show();
    }
}
Lenguaje del código: JavaScript (javascript)

3. Aviso importante (obsoleto)

getActiveNetworkInfo() y NetworkInfo están obsoletos desde Android 10 (API29)

Las versiones nuevas de Android recomiendan usar el callback ConnectivityManager.NetworkCallback para supervisar la red. Ya no se recomienda el método antiguo de difusión + NetworkInfo.

Desventajas del método antiguo

  1. Después de Android 8.0 (API26), las difusiones de estado de red registradas de forma estática están restringidas. El registro estático no recibe difusiones de cambios de red; debe registrar el receptor de forma dinámica.
  2. La clase NetworkInfo está obsoleta. Llamadas directas en versiones nuevas generan advertencias o fallan.

4. Registro dinámico del BroadcastReceiver

// Definir receptor de difusión
public class NetReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        // Escribir aquí el código de comprobación de red anterior
    }
}
// Registro dinámico dentro de Activity
IntentFilter filter = new IntentFilter();
filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
NetReceiver receiver = new NetReceiver();
registerReceiver(receiver, filter);
Lenguaje del código: PHP (php)

Supervisión por difusión de conexión / desconexión de red en Android

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *