Esta es la implementación de la API antigua de Android (Android 7 y versiones anteriores), usando BroadcastReceiver +
ConnectivityManager+NetworkInfopara detectar la conexión y desconexión de red.
1. Conceptos clave
- ConnectivityManager: Clase de servicio de sistema dedicada a gestionar el estado de conexión de red.
- 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)
- Principio: Cuando ocurre un cambio de red, el sistema envía difusiones de red. Dentro del callback
onReceivedeBroadcastReceiver, usaConnectivityManagerpara 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.NetworkCallbackpara supervisar la red. Ya no se recomienda el método antiguo de difusión + NetworkInfo.
Desventajas del método antiguo
- 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.
- La clase
NetworkInfoestá 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