更新记录
1.0.0(2026-09-11) 下载此版本
首发版本。
功能
- 对齐 uni 官方 WiFi 模块:
startWifi/stopWifi/getConnectedWifi/onWifiConnected/offWifiConnected/getWifiList/onGetWifiList/offGetWifiList - 增强超集:
connectWifi(连接指定 WiFi)、disconnectWifi、getCurrentSSID - Android + iOS 双平台
getConnectedWifi返回WifiInfo:SSID/BSSID/secure/signalStrength/frequencygetWifiList返回wifiList(含SSID/BSSID/signalStrength/secure/frequency)connectWifi同时兼容 uni 大写SSID与旧小写ssid,并支持 options 回调与第二参 callback 两种调用(二者都会触发)errCode对齐 jagger-wifi:0成功 /9010001失败 /9010002连接后断开(仅 Android)- 连接超时可配置:
timeout(ms;Android 默认 12000,iOS 默认 20000)
平台实现
- Android:基于
WifiManager连接/断开,startScan+SCAN_RESULTS_AVAILABLE_ACTION获取扫描列表,NETWORK_STATE_CHANGED_ACTION提供系统级连接事件 - iOS:基于
NEHotspotConfiguration连接,NEHotspotNetwork.fetchCurrent优先读取当前 SSID,回退CNCopyCurrentNetworkInfo
修复与优化
- iOS:修复
connectWifi的timeout参数被丢弃问题(options.timeout已透传,并 clamp 到 20~90s) - iOS:混编 Swift 数值参数统一使用
NSNumber,避免NSNumber/Int类型编译错误 - iOS:连接前做定位授权检查,
notDetermined时主动requestWhenInUseAuthorization - iOS:移除不可用的非公开 SPI(
SecTaskCreateFromSelf/SecTaskCopyValueForEntitlement),改为解析embedded.mobileprovision自检 Access WiFi Information 能力 - iOS:优先使用
NEHotspotNetwork.fetchCurrent(旧CNCopyCurrentNetworkInfo在新系统常返回空),并增加上次结果缓存
文档
- README 增加平台能力矩阵,明确各 API 在 Android / iOS 的支持情况与降级行为
- 补充 iOS 接入配置(Hotspot Configuration / Access WiFi Information 能力、
UTS.entitlements、Info.plist权限说明)与 Android 权限说明 - 补充已知限制(系统 API 限制、ROM 差异、模拟器不支持等)
平台兼容性
uni-app(5.24)
| Vue2 | Vue3 | Chrome | Safari | app-vue | app-nvue | Android | iOS | 鸿蒙 |
|---|---|---|---|---|---|---|---|---|
| √ | × | × | × | √ | × | √ | √ | - |
| 微信小程序 | 支付宝小程序 | 抖音小程序 | 百度小程序 | 快手小程序 | 京东小程序 | 鸿蒙元服务 | QQ小程序 | 飞书小程序 | 小红书小程序 | 快应用-华为 | 快应用-联盟 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| × | × | × | × | × | × | × | × | × | × | × | × |
uni-app x(5.24)
| Chrome | Safari | Android | iOS | 鸿蒙 | 微信小程序 |
|---|---|---|---|---|---|
| - | - | × | × | - | - |
lucis-wifi
对齐 uni 官方 WiFi 模块能力并补齐增强能力,Android + iOS 双端。
- 官方对齐:
startWifi/stopWifi/getConnectedWifi/onWifiConnected/offWifiConnected/getWifiList/onGetWifiList/offGetWifiList - 增强超集:
connectWifi(连接指定 WiFi)/disconnectWifi/getCurrentSSID
使用
import {
connectWifi, disconnectWifi, getCurrentSSID,
startWifi, stopWifi, getConnectedWifi,
onWifiConnected, offWifiConnected,
getWifiList, onGetWifiList, offGetWifiList
} from "@/uni_modules/lucis-wifi";
// 初始化(Android 建议先调用;iOS 空实现)
startWifi({ success: () => console.log("startWifi ok") });
// 连接(同时兼容 uni 大写 SSID 与旧小写 ssid)
connectWifi(
{
SSID: "MyWiFi",
password: "12345678", // 开放网络可不传
timeout: 25000, // ms;Android 默认 12000,iOS 默认 20000 且 clamp 到 20~90s
success: (res) => console.log("连接成功", res.ssid),
fail: (res) => console.log("连接失败", res.errMsg)
},
// 也支持第二参 callback(两种都会触发)
(res) => {
// res.errCode: 0 成功 / 9010001 失败 / 9010002 连接后断开(仅 Android)
}
);
// 当前连接详情(字段对齐 uni WifiInfo)
getConnectedWifi({
success: (info) => console.log(info.SSID, info.BSSID, info.secure, info.signalStrength, info.frequency),
fail: (err) => console.log("未连接或无权限", err.errMsg)
});
// 连接事件(Android 系统级;iOS 仅在 connectWifi 成功时触发一次)
onWifiConnected((info) => console.log("已连接", info.SSID));
offWifiConnected();
// WiFi 列表(仅 Android;iOS 固定 fail)
onGetWifiList((res) => console.log("共", res.wifiList.length, "个网络"));
getWifiList({ fail: (err) => console.log("不支持", err.errMsg) });
offGetWifiList();
// 断开(Android 断开当前连接;iOS 移除本插件为最近成功连接的 WiFi 添加的配置)
disconnectWifi();
// 同步查询当前 SSID
const ssid = getCurrentSSID(); // 未连接 / 无权限时返回 ""
// 释放
stopWifi();
平台能力矩阵
| 能力 / API | Android | iOS |
|---|---|---|
connectWifi 连接指定 WiFi |
✅ | ✅ 仅能连接本 App 通过 NEHotspot 配置过的网络 |
disconnectWifi |
✅ 断开当前连接 | ⚠️ 仅移除本 App 添加的配置,无法强制断开系统当前网络 |
getCurrentSSID |
✅ | ✅(需 Access WiFi Information + 定位权限) |
getConnectedWifi(SSID/BSSID/secure/信号/频段) |
✅ 全字段 | ⚠️ SSID 可用,BSSID 常受系统限制为空;secure/信号/频段无公开 API(false/0) |
onWifiConnected / offWifiConnected |
✅ 系统级事件 | ⚠️ 仅 connectWifi 成功时触发,无系统级连接/断开事件 |
getWifiList / onGetWifiList |
✅ 扫描列表 | ❌ 无公开 API,固定 fail |
startWifi / stopWifi |
✅ 初始化/停止扫描与监听 | ⚠️ 空实现(兼容签名) |
连接断开通知 9010002 |
✅ | ❌ |
系统权限
Android
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<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" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.NEARBY_WIFI_DEVICES"
android:usesPermissionFlags="neverForLocation" />
iOS(utssdk/app-ios/UTS.entitlements + Info.plist)
| 项 | 标识 | 说明 |
|---|---|---|
| 能力(Entitlement) | com.apple.developer.networking.wifi-info |
Access WiFi Information,读取当前 SSID |
| 能力(Entitlement) | com.apple.developer.networking.HotspotConfiguration |
Hotspot Configuration,连接指定 WiFi |
| 用途描述(Info.plist) | NSLocationWhenInUseUsageDescription |
读取当前 WiFi 名称所需的定位授权说明 |
| 用途描述(Info.plist) | NSLocalNetworkUsageDescription |
访问本地网络以连接 / 查询附近 WiFi 的说明 |
上述两个 Entitlement 需在 Apple Developer 为对应 bundle id 开启后才可用于打包;运行时系统会请求「定位(使用期间)」授权并弹出「允许加入 WiFi 网络」确认。
配置
iOS(打包前必须完成)
- 在 Apple Developer 为 bundle id 开启:
- Hotspot Configuration
- Access WiFi Information
- 本插件已内置
utssdk/app-ios/UTS.entitlements(含上述两个 capability)与Info.plist(NSLocalNetworkUsageDescription+NSLocationWhenInUseUsageDescription),云端打包自动合并。 - 连接时系统会依次弹出定位授权与「允许加入 WiFi 网络」确认,均需允许并保持 App 前台。
- 模拟器无法读取 SSID;个人热点/系统限制场景也可能读不到。
Android
插件 utssdk/app-android/AndroidManifest.xml 已声明所需权限(WiFi 状态/修改、网络状态、精/粗定位、NEARBY_WIFI_DEVICES),打包自动合并,无需在 manifest.json 重复添加。
涉及原生代码/清单/能力配置,真机调试需重新制作自定义基座,发布需云端打包后生效。
已知限制
- Android 10+ 的
addNetwork/enableNetwork已废弃,多数设备可用,部分国产 ROM / Android 14+ 可能受限 - Android 扫描列表(
getWifiList)需要定位或 NEARBY_WIFI_DEVICES 权限,且部分 ROM 限制后台扫描频率 - iOS 只能管理由本 App 添加的热点配置,无法连接系统已保存但非本 App 添加的网络
- iOS 读取 SSID 依赖 Access WiFi Information + 定位授权;插件优先使用
NEHotspotNetwork.fetchCurrent,读不到时回退CNCopyCurrentNetworkInfo - 连接是否成功以系统状态为准,插件轮询仅做尽力判定

收藏人数:
下载插件并导入HBuilderX
赞赏(0)
下载 34
赞赏 0
下载 12589921
赞赏 1949
赞赏
京公网安备:11010802035340号