uni.getconnectedwifi 是 app 端获取当前 wifi 强度(dbm)、ssid 和 bssid 的唯一标准 api,仅支持 app-plus 环境,需真机运行、权限授权及定位服务开启,与 uni.getnetworktype 互补而非替代。

uni.getConnectedWifi 是当前最可靠的方式
在 App 端(Android/iOS),uni.getConnectedWifi 是官方支持、无需额外插件、且能同时拿到 SSID、BSSID 和信号强度的唯一标准 API。它返回的 res.wifi.signalStrength 就是你要的 WiFi 强度(单位 dBm),值越接近 0 表示信号越强(比如 -45 比 -72 好)。
常见错误现象:
• 调用后进 fail 回调,控制台报错 “not supported” —— 很可能运行在 H5 或小程序环境,该 API 仅限 app-plus;
• 返回 signalStrength: 0 或 undefined —— 多数是权限未授予或系统限制(尤其 iOS 16+ 后需定位服务开启)。
- 必须确保运行在真机上(模拟器/浏览器均不支持)
- Android 需在
manifest.json的android.permissions中声明:ACCESS_WIFI_STATE和ACCESS_NETWORK_STATE - iOS 不需要额外配置权限,但必须开启设备「定位服务」(即使不使用 GPS),否则部分机型(如 iOS 16.4+)会静默失败或弹出隐私警告
- 调用前建议先用
uni.getNetworkType判断是否为wifi,避免无意义请求
为什么不能只靠 uni.getNetworkType
uni.getNetworkType 只返回字符串(如 "wifi"),完全不包含强度、名称等任何细节。它适合做“有无 WiFi”的粗粒度判断,比如自动切换高清/标清视频流,但无法支撑配网、信号诊断、位置辅助等场景。
使用场景举例:
• 用户进入设置页,你想显示“当前连接:HomeWiFi(强)”——必须用 uni.getConnectedWifi;
• 智能家居 App 在扫描设备前,需确认手机和设备在同一局域网——单靠 networkType === "wifi" 不够,还得比对 SSID。
- 它响应快、无权限弹窗、H5/小程序也支持,但信息维度太低
- 和
uni.getConnectedWifi是互补关系,不是替代关系 - 别在
onLoad里直接链式调用两者——网络状态可能异步变化,建议加防抖或监听uni.onNetworkStatusChange
Android 扫描周边 WiFi 要额外注意定位开关
如果你需要的不只是“当前连的”,而是“周围有哪些 WiFi 可连”(比如配网页列表),就得用原生插件(如 Fvv-UniWifiHelper)。但 Android 10+ 开始,WifiManager.startScan() 被强制要求开启 GPS 定位,否则返回空列表或直接报错。
常见错误现象:
• scanWifi() 成功回调但 list 为空数组;
• 控制台无报错,但真机上始终看不到任何热点;
• 用户反馈“功能失效”,你查日志发现一切正常——大概率是用户没开定位。
- 必须在
manifest.json中同时声明ACCESS_FINE_LOCATION和ACCESS_COARSE_LOCATION - 首次调用前,用
uni.authorize({scope: 'scope.location'})主动申请定位授权(iOS 同样需要) - 不要假设用户知道“开定位=能扫 WiFi”,应在 UI 上明确提示,例如:“请开启定位服务以搜索可用网络”
- 信号强度字段名因插件而异:
Fvv-UniWifiHelper返回level,cordova-plugin-wifi可能叫strength,务必查文档
小程序端用 wx.getConnectedWifi,但平台逻辑完全不同
微信小程序有自己的生态规则:uni.getConnectedWifi 在小程序环境下实际是透传到 wx.getConnectedWifi。但它有硬性前提——必须在“已授权 WiFi 信息”的前提下才能成功,而授权动作由微信统一管理,开发者无法主动触发。
这意味着:
• 首次调用大概率进 fail,提示 “not authorized”;
• 即使用户点过授权,某些安卓微信版本仍会因系统限制返回空;
• iOS 微信对 BSSID 过滤更严,常返回 "<unknown>"</unknown>。
- 不要在小程序中依赖
BSSID做唯一标识,改用SSID+ 网络特征(如 IP 段)组合判断 - 若需稳定获取,应引导用户手动进入微信「设置 > 隐私 > 通用 > Wi-Fi 信息」开启开关
- 跨平台项目中,务必用条件编译隔离逻辑:
#ifdef MP-WEIXIN下走wx.getConnectedWifi,#ifdef APP-PLUS下走uni.getConnectedWifi
真正难的不是调哪个函数,而是搞清“谁在什么时候能返回什么”。iOS 的定位联动、Android 的权限分组、小程序的授权黑盒——这些不是 bug,是平台规则。写一次代码就指望全端跑通,基本等于在雷区蒙眼走路。










