uni.getnetworktype 是首选方案,因它是 uni-app 官方提供的最轻量、跨平台网络类型查询接口,调用即得当前活跃网络类型,无需权限、不依赖定位,app/h5/小程序均支持,但仅返回快照且无法区分 wifi 名称或信号强弱。

直接用 uni.getNetworkType 就能判断,但要注意它只返回快照、不监听变化,且无法区分 WiFi 具体名称或信号强弱。
为什么 uni.getNetworkType 是首选方案
它是 uni-app 官方提供的最轻量、跨平台(App/H5/小程序)的网络类型查询接口,调用即得当前系统认定的活跃网络类型。不需要额外权限、不依赖定位服务、真机/模拟器均可运行。
- 返回值
res.networkType为"wifi"表示系统正通过 WiFi 传输数据 - 返回
"4g"(或"5g"、"2g"、"3g")表示走蜂窝移动网络 - 返回
"none"说明无任何网络连接;"unknown"多见于异常环境(如某些 Android 模拟器) - H5 环境下可能始终返回
"unknown",小程序中部分平台也受限,但 App 端表现稳定
uni.getNetworkType 的典型误用场景
开发者常在页面 onLoad 或 created 里调用一次就以为万事大吉,结果遇到以下问题:
- 用户进页面时 WiFi 已连但 DHCP 尚未完成 →
res.networkType仍为"none",实际几秒后才变"wifi" - 页面停留期间用户手动切换网络(比如关 WiFi),但代码没监听变化 → 状态一直“滞留”在旧值
- 把
networkType === "wifi"当作“能访问局域网”的充分条件 → 实际可能连的是无网热点或认证 Portal 页面未跳转
需要实时响应切换?必须搭配 uni.onNetworkStatusChange
uni.getNetworkType 是快照,uni.onNetworkStatusChange 才是事件监听器。它能在系统网络栈真实变化时触发(如 WiFi 断开瞬间、4G 切 5G),但有硬性限制:
- 仅在 App 前台生效,切后台立即停止回调(iOS/Android 系统级限制)
- 必须在
onShow生命周期中重新注册,否则从后台切回前台后监听失效 - 返回的
res.isConnected和res.networkType仍是粗粒度值,不提供 SSID 或信号强度 - Android 厂商定制系统(如华为 EMUI、小米 MIUI)可能因省电策略延迟或丢弃回调,需引导用户开启「自启动」和「电池优化白名单」
想确认连的是不是指定 WiFi?绕不开 uni.getConnectedWifi
如果业务要求精确识别 SSID(比如“只允许连接 office-2f 才能打卡”),uni.getNetworkType 完全不够用。此时必须用 uni.getConnectedWifi,但它带来新约束:
- 仅支持
app-plus(即原生 App),H5 和小程序调用直接报"not supported" - Android 需在
manifest.json中声明ACCESS_WIFI_STATE和ACCESS_NETWORK_STATE - iOS 16+ 必须开启设备「定位服务」,否则静默失败或弹隐私警告(即使不使用 GPS)
- 真机运行是硬前提,模拟器/浏览器一律不支持
- 建议先用
uni.getNetworkType判断为"wifi"后再调用,避免无意义请求
真正容易被忽略的是:WiFi 连接成功 ≠ 能上网,isConnected: true 也不代表 DNS 可解析、HTTP 可通。关键业务逻辑(如上传、局域网发现)前,务必加一次真实接口探活或 ping 校验。











