BroadcastReceiver получает несколько одинаковых сообщений для одного события
Я зарегистрировал приемник, который прослушивает сетевые события:
<receiver
android:label="NetworkConnection"
android:name=".ConnectionChangeReceiver" >
<intent-filter >
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
</intent-filter>
</receiver>
Приемник тоже очень прост:
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");
}
}
}
Проблема в том, что при подключении к Wi-Fi я получаю 3 одинаковых сообщения подряд, например:
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
Все они «ПОДКЛЮЧЕНЫ / ПОДКЛЮЧЕНЫ» (не должно ли это быть что-то вроде CONNECTING / OBTAINING_IPADDR и т. Д.), Поэтому проблема в том, как мне узнать, когда он действительно подключен? У меня есть некоторые процедуры, которые я хочу сделать, когда Wi-Fi действительно подключен, и я не хочу, чтобы они вызывались три раза подряд.
PS: 3G отправляет только одно сообщение, поэтому здесь нет проблем.
Обновить:
Похоже, это проблема конкретного устройства.
Для тестирования я взял 2 Desire HD и 4 случайных телефона Android (разные модели Aquos и некоторые безымянные китайские вещи). Как на DHD, так и на одном случайном телефоне при подключении к Wi-Fi я получил 3 сообщения, на остальных телефонах - только одно. WTF.