android.permission.ACCESS_WIFI_STATE会触发这么多完整的状态

时间:2018-05-15 10:20:44

标签: android wifimanager

在我的广播接收器中,我使用以下代码来识别Wifi是连接还是断开连接。它工作正常,但wifiInfo.getSupplicantState()。equals(SupplicantState.COMPLETED)在连接wifi时至少返回4到7次为真。

我可以使用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的intent-filter

<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 :(得分:1)

不,你不能使用,因为来自ASSOCIATING

的文档
  

尝试与BSS / SSID关联。进入此状态时   wpa_supplicant找到了一个合适的BSS与之关联   驱动程序配置为尝试在ap_scan = 1中与此BSS关联   模式。使用ap_scan = 2模式时,在驱动程序时输入此状态   配置为尝试使用配置的网络关联   SSID和安全政策。

意味着它正在进行中。 另外,如果您考虑ASSOCIATED

  

协会完成。当驾驶员报告时输入此状态   该关联已成功完成AP。如果IEEE   使用802.1X(有或没有WPA WPA2),wpa_supplicant保持此状态,直到IEEE 802.1X / EAPOL身份验证为止   完成。

因此,这些都处于未完全连接到wifi AP的状态。
所以,最好只使用COMPLETED
对于处理重复的回调,使用一个布尔值,如果在块中则为true,在else块中为false。如果为块,则仅在为false时进入内部。