BroadcastReceiver recebe várias mensagens idênticas para um evento
Registrei um receptor que escuta eventos da rede:
<receiver
android:label="NetworkConnection"
android:name=".ConnectionChangeReceiver" >
<intent-filter >
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
</intent-filter>
</receiver>
receptor também é muito simples:
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");
}
}
}
O problema é que, quando o Wi-Fi está conectado, recebo 3 mensagens idênticas seguidas, assim:
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
Eles são todos "CONECTADOS / CONECTADOS" (não deveriam ser algo como CONNECTING / OBTAINING_IPADDR etc.), então o problema é como saber quando está realmente conectado? Tenho algumas rotinas que quero fazer quando o wifi estiver realmente conectado e não quero que sejam chamadas três vezes seguida
PS: 3G envia apenas uma mensagem, então não há problema aqu
Atualizar
arece que é um problema específico do dispositiv
ara o teste, fiz 2 Desire HD e 4 telefones Android aleatórios (diferentes modelos Aquos e algumas coisas chinesas sem nome). No DHD e em um telefone aleatório na conexão wifi, recebi 3 mensagens, nos telefones restantes, recebi apenas uma mensagem. WTF.