在我的广播接收器中,我使用以下代码来识别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>
答案 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时进入内部。