使用WifiNetworkSpecifier无法连接指定WiFi问题咨询
问题排查与修正方案
1. 权限配置问题
你的AndroidManifest.xml缺少必须权限,且存在多余权限:
- 必须添加
android.permission.ACCESS_FINE_LOCATION权限,Android 10(API 29)及以上扫描、匹配WiFi必须依赖位置权限,且需要在代码中主动申请运行时权限,用户同意后才能正常执行连接逻辑 android.permission.WRITE_SETTINGS为多余权限,WifiNetworkSpecifier不需要该权限,可直接移除
修正后的AndroidManifest.xml权限配置:
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
2. NetworkRequest配置错误
你在构造NetworkRequest时添加了addCapability(NET_CAPABILITY_INTERNET)配置,该配置会让系统仅匹配具备互联网访问能力的WiFi网络,如果你要连接的目标WiFi本身没有互联网能力,会直接匹配失败触发连接错误。
如果你的业务需要支持连接无互联网的WiFi,直接删除该行配置即可。
3. 缺少错误回调处理
当前仅实现了连接成功和连接断开的回调,没有实现异常回调,无法排查具体失败原因,需要在NetworkCallback中新增onUnavailable方法,该方法会在系统找不到匹配WiFi、用户拒绝连接弹窗、权限不足等场景触发,可打印日志定位问题。
4. 缺少WiFi状态前置判断
执行连接逻辑前需要先判断WiFi是否已开启,如果WiFi处于关闭状态,连接请求会直接失败:
if (!wifiManager.isWifiEnabled) { Toast.makeText(this, "请先开启WiFi", Toast.LENGTH_SHORT).show() return }
补充注意事项
WifiNetworkSpecifier的连接逻辑会触发系统级的连接确认弹窗,需要用户手动同意后才会执行连接,如果没有出现弹窗,优先检查位置权限是否已经授予。
内容的提问来源于stack exchange,提问作者Polaris Nation
相关产品推荐
相关产品推荐

