最近需要做wifi连接,一百度全都是vip文章,所以本人把自己的经验分享给大家一起进步
1、 Android 调用前需要 用户授权 scope.userLocation ,也就是获取位置授权。
2、iOS 上将跳转到系统设置中的微信设置页,需要用户手动进入「无线局域网」查看wifi列表 ,并在系统扫描到wifi列表后,小程序才能收到 onGetWifiList 回调。Android 不会跳转
场景一:知道wifi账号和密码,直接连接就可以了
<view class="confrim" @click="onAutolink">一键连接</view>
//由于我自己的项目在首页的时候获取了定位,所以这里就不需要打开位置授权了
onAutolink(){
let wifiName = "后台获取的wifi账号"
let wifiPassword = "后台获取的wifi密码"
uni.startWifi({
success:e=>{
uni.connectWifi({
SSID:wifiName, // SSID就是账号
password:wifiPassword, // 密码
complete:complete=>{
console.log("complete",complete)
}
})
},
})
}
场景二:不知道wifi账号,只知道密码
<view class="" v-for="item in wifiList " :key="item.SSID">
<view class="name">{{item.SSID}}</view>
<view class="btn" @click="onLink(item)">连接</view>
</view>
// 在 onLoad 里面调用 或者点击页面某个按钮调用
onFiwi(){
let sys = uni.getSystemInfoSync()
if(sys.osName === "ios" || sys.platform === "ios" ){
this.initWifi()
}else{
// 获取位置也就是相当于获取位置授权了
uni.getLocation({
success:()=>{
this.initWifi()
}
})
}
},
initWifi(){
uni.startWifi({
success:e=>{
// 获取wifi列表
uni.getWifiList()
// 监听获取到的wifi列表
uni.onGetWifiList(res=>{
// 这里可以获取到wifi列表
// ios需要手动打开系统的wifi,系统搜索到wifi后然后返回小程序才会有数据
console.log("wifiList",res.wifiList)
this.wifiList = res.wifiList
})
},
fail:fail=>{
console.log("wififail",fail)
}
})
},
// 如果事先不知道密码,可以在这里搞个弹窗让用户先输入密码再调用这个方法
onLink(item){
if(!this.password){
uni.showToast(icon:"none",title:"密码不能为空")
return
}
uni.connectWifi({
SSID:item.SSID, //账号
password: this.password, // 密码
complete:complete=>{
console.log("complete",complete)
}
})
}