android - android.permission.ACCESS_WIFI_STATE 触发了这么多完整的状态
问题描述
在我的广播接收器中,我使用下面的代码来识别 Wifi 是连接还是断开。它工作得很好,但是 wifiInfo.getSupplicantState().equals(SupplicantState.COMPLETED) 在连接 wifi 时返回 true 至少 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;
}
这是我用于广播接收器的意图过滤器
<receiver
android:name="WifiReceiver"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="android.net.wifi.STATE_CHANGE"/>
</intent-filter>
</receiver>
解决方案
不,你不能使用,因为从文档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
用于处理重复回调的布尔值,它在 if 块中为真,在 else 块中为假。只有当它为假时才会进入 if 块。
推荐阅读
- flutter - 如何在飞镖图中添加重复键?
- c# - 使用代码在不同模式中的两个表之间进行实时映射
- operating-system - 在上下文切换期间,操作系统是否使用 PCB 或内核堆栈来恢复寄存器?
- java - Camel Spring 测试中的生产者模板显示 NullPointerException
- python - 在重新加载页面时,它要求重新提交上一个操作。如何使用重定向?
- c++ - 编译器忽略 #include 指令是否合法?
- amazon-ec2 - 使用 Terraform 在预置机器上安装 Ansible
- android - 通过 Retrofit 调用发布请求时出现 400 bad request 错误
- php - mysql在2列同一张表中使用自动增量的值
- kubernetes - 创建少量资源后部署停止