一 业务需求
需要判断小程序是否连接指定wifi,如果没有就需要重新拿到并连接,Andirid和ios是有明显差异,根据设备来判断优化基础流程
二文档和技术支持
微信小程序官方文档:WifiInfo | 微信开放文档
基本需要的API是:
wx.startWifi 初始化模块
wx.getConnectedWifi 当前连接的wifi信息
wx.onGetWifiList 获得wifi列表
wx.connectWifi wifi连接
wx.getWifiList 请求获取wifi列表
一wx.connectWifi
wifi连接的API的约束比较多,再Andirid10往上会只能再小程序中使用wifi,其他应用无法使用wifi,贴出来一部分,具体还是看官方文档比较好
二wx.getWifiList 请求获取wifi列表
这个API是属于前置条件同意了,onGetWifiList才能拿到wifi列表,这个ios会跳转到设置页面,并且需要用户手动进入【无线局域网】设置页,并扫描,比较繁琐,具体文档wx.getWifiList(Object object) | 微信开放文档
三实现流程
需要判断不同系统,需要不同的提示,并且找到指定WiFi以后自动连接
1Andirid设备可能会在wifi初始化时报错,需要先配置好权限,不然会一直失败
代码模板
"permission" : {
"scope.userLocation" : {
"desc" : "你的位置将用于小程序接口的效果展示"
}
}
2判断当前WiFi是否是指定WiFi
初始化wifi模块,获取当前wifi,并通过wifi名称判断是否时指定WiFi,不是就进入获得wifi并连接
ConnectedWifi(){
let that = this
wx.startWifi({
success (res) {
wx.getConnectedWifi({
partialInfo:true,
success(res){
console.log(res);
if(res.errCode == 0 &&res.wifi.SSID == '指定WiFi名'){
wx.showModal({
title:'提示',
content:"您已经成功连接wifi!",
confirmText:'确定',
cancelText:"取消"
})
return
}
const systemInfo = wx.getSystemInfoSync()
let contentText='您未连接正确wifi'
systemInfo.platform == "ios" ? contentText='您未连接正确WIFi,您同意后,会跳转到设置页面,请您去到wifi列表页面' :''
//未正确连接WiFi名
wx.showModal({
title:'提示',
content:contentText,
confirmText:"查询WIFI",
cancelText:'取消',
success: (res) => {
if(res.confirm){
//拿到WiFi列表
that.testWifi()
}else{
//取消
}
}
})
},
fail(err){
console.log(err,"----");
}
})
},
fail(startErr) {
if(startErr.errCode == 12005){
uni.showModal({
title: '提示',
content: "请先打开WIFI模块",
showCancel: true,
confirmText: "确定",
cancelText: '取消',
})
}
}
})
3获取wifil列表
注意!!ios需要再设置里打开WiFi才能获取列表!
testWifi(){
//重新拿到所有wifi信息
let _that = this
uni.showLoading({
title: '加载中'
});
wx.getWifiList({
success(wifilist){
console.log("wifi数据",wifilist);
//拿到wifi列表
wx.onGetWifiList((list)=>{
console.log("wifi列表---------",list);
//拿到指定WiFi的信息
let wifi = list.wifiList.find(item => item.SSID == '指定WiFi名称')
setTimeout(()=>{
//连接WiFi
_that.chagneWifi(wifi)
uni.hideLoading()
},1000)
})
},
fail(listwifi){
if(listwifi.errCode == 12005){
uni.showModal({
title: '提示',
content: "请先打开WIFI",
showCancel: true,
confirmText: "确定",
cancelText: '取消',
})
}
}
})
},
4wifi连接
可能会有Andirid只有小程序生效wifi,具体看上面的文档
//WiFi连接
chagneWifi(item){
console.log(item,"wifi数据");
wx.connectWifi({
SSID:item.SSID,
BSSID:item.BSSID,
password:'wifi密码',
success(res){
console.log(res,"wifi连接成功");
uni.showModal({
title:'提示',
content:'wIFI链接成功',
})
},
fail(err){
console.log(err,"wifi链接失败");
uni.showModal({
title:'提示',
content:'wIFI链接失败',
})
}
})
},