BroadcastReceiver recibe múltiples mensajes idénticos para un evento
Registré un receptor que escucha eventos de red:
<receiver
android:label="NetworkConnection"
android:name=".ConnectionChangeReceiver" >
<intent-filter >
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
</intent-filter>
</receiver>
receiver también es muy simple:
public class ConnectionChangeReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetInfo = connectivityManager.getActiveNetworkInfo();
if (activeNetInfo != null) {
Log.v("@@@","Receiver : " + activeNetInfo);
} else {
Log.v("@@@","Receiver : " + "No network");
}
}
}
El problema es que, cuando se conecta Wifi, recibo 3 mensajes idénticos seguidos, como este:
Receiver : NetworkInfo: type: WIFI[], state: CONNECTED/CONNECTED, reason: (unspecified), extra: (none), roaming: false, failover: false, isAvailable: true
Receiver : NetworkInfo: type: WIFI[], state: CONNECTED/CONNECTED, reason: (unspecified), extra: (none), roaming: false, failover: false, isAvailable: true
Receiver : NetworkInfo: type: WIFI[], state: CONNECTED/CONNECTED, reason: (unspecified), extra: (none), roaming: false, failover: false, isAvailable: true
Todos están "CONECTADOS / CONECTADOS" (¿No deberían ser algo así como CONECTAR / OBTENER_IPADDR, etc.), entonces el problema es cómo saber cuándo está realmente conectado? Tengo algunas rutinas que quiero hacer cuando wifi está realmente conectado, y no quiero que se llamen tres veces seguidas.
PS: 3G solo envía un mensaje, así que no hay problema aquí.
Actualizar
Parece que es un problema específico del dispositivo.
Para la prueba, tomé 2 Desire HD y 4 teléfonos Android aleatorios (diferentes modelos Aquos y algunas cosas chinas sin nombre). Tanto en DHD como en un teléfono aleatorio con conexión wifi recibí 3 mensajes, en los teléfonos restantes solo recibí un mensaje. WTF.