обнаружение отключения от точки доступа Wi-Fi

Я пытаюсь использовать BroadcastReceiver, чтобы определить, когда телефон отключился от точки доступа Wi-Fi. Для этого я зарегистрировал свой BroadcastReceiver в манифесте:

<receiver android:name="com.eshayne.android.WiFiBroadcastReceiver">
    <intent-filter>
        <action android:name="android.net.wifi.STATE_CHANGE" />
    </intent-filter>
</receiver>

В моем классе WiFiBroadcastReceiver, Я проверяю действие NETWORK_STATE_CHANGED_ACTION и просматриваю подробное состояние NetworkInfo:

if (action.equals(WifiManager.NETWORK_STATE_CHANGED_ACTION)) {
    NetworkInfo info = (NetworkInfo)intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO);
    android.util.Log.d("com.eshayne.android.WiFiBroadcastReceiver", "network state change - detailedState=" + info.getDetailedState() + ": " + info.toString());
    if (info.getDetailedState() == DetailedState.DISCONNECTED) {
        ...
    }
    else if (info.getDetailedState() == DetailedState.CONNECTED) {
        ...
    }

Проблема, которую я вижу, заключается в том, что когда телефон покидает зону действия точки доступа Wi-Fi, мой "отключенный" обратный вызов вызывается 6 раз - довольно регулярно примерно раз в 15 секунд - до остановки. Пока мне не удалось найти каких-либо отличительных характеристик между NetworkInfo каждого обратного вызова. Каждый объект NetworkInfo, записываемый в журнал, выглядит следующим образом:

02-18 10:16:51.918 D/com.eshayne.android.WiFiBroadcastReceiver( 1511): network state change - detailedState=DISCONNECTED: NetworkInfo: type: WIFI[], state: DISCONNECTED/DISCONNECTED, reason: (unspecified), extra: (none), roaming: false, failover: false, isAvailable: true

Это также не проблема, когда телефон блуждает в зоне действия Wi-Fi и выходит за ее пределы, поскольку мой «подключенный» обратный вызов не вызывается между «отключенными» обратными вызовами. И никакие другие состояния не запускаются между ними. Просто быстрая серия из 6 обратных вызовов, каждый с подробным состоянием DISCONNECTED.

Есть ли лучший способ определить, когда телефон потерял соединение Wi-Fi, чтобы мой обратный вызов вызывал только один раз при отключении? Или каким-либо способом определить, какой из 6 обратных вызовов, который я вижу, является «последним»?

10
задан eshayne 18 February 2011 в 22:03
поделиться