android.permission.ACCESS_WIFI_STATE вызывает так много завершенных состояний - PullRequest
0 голосов
/ 15 мая 2018

В моем приемнике вещания я использую приведенный ниже код, чтобы определить, подключен или отключен Wi-Fi.Это работает отлично, но wifiInfo.getSupplicantState (). Equals (SupplicantState.COMPLETED) возвращает true по крайней мере 4-7 раз при подключении Wi-Fi.

Могу ли я использовать SupplicantState.ASSOCIATING, поскольку он запускается только один раз?

WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
if(wifiManager.isWifiEnabled()){
    WifiInfo wifiInfo = wifiManager.getConnectionInfo();
    if( wifiInfo.getSupplicantState().equals(SupplicantState.COMPLETED)){ //Connected ??
        //Do Something
    }
    else if( wifiInfo.getSupplicantState().equals(SupplicantState.DISCONNECTED)){       
        //Do Something
    }
}
else{
    //Wifi Adaptor disabled;
}

Вот фильтр намерений, который я использую для BroadCast Receiver

<receiver
    android:name="WifiReceiver"
    android:enabled="true"
    android:exported="true">
    <intent-filter>
        <action android:name="android.net.wifi.STATE_CHANGE"/>
    </intent-filter>
</receiver>

1 Ответ

0 голосов
/ 15 мая 2018

Нет, вы не можете использовать, потому что из документов ASSOCIATING

Попытка связаться с BSS / SSID.Это состояние вводится, когда wpa_supplicant обнаружил подходящую BSS для связи, и драйвер настроен на попытку связи с этой BSS в режиме ap_scan = 1.При использовании режима ap_scan = 2 это состояние вводится, когда драйвер настроен на попытку подключения к сети с использованием настроенного SSID и политики безопасности.

означает, что выполняется.Также если вы думаете о ASSOCIATED

Ассоциация завершена.Это состояние вводится, когда драйвер сообщает, что сопоставление было успешно завершено с AP.Если используется IEEE 802.1X (с WPA WPA2 или без него), wpa_supplicant остается в этом состоянии до тех пор, пока не будет завершена аутентификация IEEE 802.1X / EAPOL.

Следовательно, все они находятся в состоянии, когда ононе подключен к Wi-Fi AP полностью.
Итак, лучше всего использовать только COMPLETED
. Для обработки этого повторного обратного вызова используйте логическое значение, которое становится истинным в блоке if, и ложным в блоке else.

...