小程序获取WIFI的API(IOS conncetWifi()自动跳转设置页)
1. 官方说明
小程序对于wifi的常用接口有
startWifi: 初始化 Wi-Fi 模块
connectWifi: 连接 Wi-Fi(iOS 需 11 及以上版本支持
onGetWifiList: 获取到 Wi-Fi 列表数据事件
但是有这两点注意事项
Android 系统 6.0 以上版本,在没有打开定位开关的时候会导致设备不能正常获取周边的 Wi-Fi 信息。
Wi-Fi 相关接口暂不可用 wx.canIUse 接口判断。
2. IOS conncetWifi()自动跳转设置页解决思路
小程序IOS获取WIFI列表有个缺陷就是会自动跳转到手机设置页面,需要点击无线局域网,等到WIFI列表加载出来之后小程序的onGetWifiList()接口才能返回wifi列表。对于这种情况有两种方式。
方法一、IOS只调用startWifi()方法,不去调用onGetWifiList方法。让用户手动输入wifi名称。再去连接wifi。这样需要用户手动输入,但是不用跳转到设置页面。不需要切换回小程序。
方法二、把 onGetWifiList()方法写在onShow()里,就可以获取到wifi列表了。
3. wifi的API
通过判断是安卓还是IOS,安卓需要判断是否有位置信息。IOS的话,就不去获取wifi列表了,如果需要的话,放在页面的onShow()里。initWIFI()方法会返回wifi列表。
async function initWIFI() { let sysInfo = wx.getSystemInfoSync() let platform = sysInfo.platform // 只有ios 11以上,及andoird 6以上,才有这样的wifi连接功能 if (platform == "android") { let sysVersion = parseInt(sysInfo.system.substr(8)) if (sysVersion < 6) { return {ok:false,msg:"android版本低"} } let res0 = await wx.getSetting({ withSubscriptions: false, }).catch(err => { console.log("err", err); return {ok:false,msg:`运行错误:${err}`} }) if (res0 && !res0.authSetting["scope.userLocation"]) { // 如果没有这个权限,先授权 let authRes = await wx.authorize({ scope: 'scope.userLocation' }).catch(err => { console.log("err", err); return {ok:false,msg:`运行错误:${err}`} }) if (authRes && authRes.errMsg != "authorize:ok") { console.log('地理授权失败', authRes.errMsg); return {ok:false,msg:'android地理授权失败'} } } await wx.startWifi().catch(err => { console.log("err", err); return {ok:false,msg:`运行错误:${err}`} }) await wx.getWifiList().catch(err => { console.log("err", err); return {ok:false,msg:`运行错误:${err}`} }) let res = await new Promise((resolve, reject) => { wx.onGetWifiList(res => { resolve(res) }) }) if (!res.wifiList.length) return {ok:false,msg:"wifi列表为空"} console.log("res.wifiList", res.wifiList); return {ok:true,msg:'WIFI列表获取成功',data:res.wifiList} } else if (platform == "ios") { let sysVersion = parseInt(sysInfo.system.substr(4)) if (sysVersion < 11) { return {ok:false,msg:"ios版本低"} } await wx.startWifi().catch(err => { console.log("err", err); return {ok:false,msg:`运行错误:${err}`} }) return {ok:true,msg:'WIFI列表获取成功',data:[]} } else { return {ok:false,msg:"平台不支持"} } } export default initWIFI