外观
手机连接设备热点后 为什么仍然请求不到设备?
标准回答
设备热点可能没有互联网,系统仍可能把默认互联网流量放到蜂窝或其他网络。应使用获准连接后得到的 Network,为设备通信创建或绑定对应 Socket,必要时连 DNS 也明确使用该网络,而不是只看到 Wi-Fi 图标就认为路由正确。(Wi-Fi Network Request API)
机制解释
Android 10 起的 WifiNetworkSpecifier 常用于应用发起的本地设备连接,涉及系统确认;WifiNetworkSuggestion 则向系统提供网络建议,不能当作强制立即切网的命令。进程整体 bindProcessToNetwork 会影响其他请求,应慎用并正确恢复。
**权限补充:**Android 13 起相关 Wi-Fi 管理 API 使用 NEARBY_WIFI_DEVICES,但 startScan、getScanResults 等仍可能要求定位授权。Android 17 上面向 API 37 及以上的应用还需要按局域网保护规则处理 ACCESS_LOCAL_NETWORK 或适用的系统中介选择流程,不能只记 INTERNET 一个权限。(附近 Wi-Fi 设备权限)(面向 Android 17 的行为变化)
延伸追问
onAvailable 就能告诉用户配网成功吗?不能,它说明相应网络可用,还要验证设备服务可达以及设备最终的入网结果;结束时移除 NetworkCallback 并释放会话。
内容来源
- Android 智能硬件 SDK 技术 Wiki · 原条目
Q47