uni-app中uni.onWifiConnected不执行
uni-app中uni.onWifiConnected不执行
开发环境 | 版本号 | 项目创建方式 |
---|---|---|
Windows | win10 | HBuilderX |
产品分类:uniapp/App
PC开发环境操作系统:Windows
HBuilderX类型:正式
HBuilderX版本号:4.28
手机系统:Android
手机系统版本号:Android 14
手机厂商:联想
手机机型:小新Pad pro 12.7(晓龙版)
页面类型:vue
vue版本:vue2
打包方式:云端
示例代码:
<template>
<view class="page">
<view style="display: block; height: 50px;"></view>
<view class="gc-box">
<button @click="getWifiList">连接wifi</button>
</view>
</view>
</template>
<script>
export default {
data() {
return {
}
},
onLoad() {},
methods: {
getWifiList() {
uni.startWifi({
success: (res) => {
console.log("startWifistartWifi"+JSON.stringify(res));
uni.connectWifi({
// "SSID":'abc',
// "password":'88888888',
"maunal": true,
"partialInfo": true,
success: (res1) => {
console.log("connectWificonnectWificonnectWifi"+JSON.stringify(res1));
},
fail: (err) => {
console.log(err);
}
});
},
fail: (err) => {
console.log(err);
},
complete: () => {
uni.onWifiConnected((winfo) => {
//不会跳这里
console.log("onWifiConnected"+JSON.stringify(winfo));
})
}
})
}
}
}
</script>
<style>
.item {
display: flex;
flex-direction: row;
align-items: center;
justify-content: space-between;
border-bottom: 2rpx solid #ddd;
padding: 16rpx 0;
}
.item .title {
flex: 1;
}
input {
border-bottom: 2rpx solid #ddd;
}
</style>
操作步骤:
- 先不打开系统定位,点击“连接wifi”。可以看到不会触发uni.onWifiConnected
- 打开定位,点击“连接wifi”。可以看到会触发uni.onWifiConnected
- 打开定位,点击“连接wifi”。 到设置页面上改成其它wifi,不会触发uni.onWifiConnected,然后点击返回到app界面,然后再点击“连接wifi”,才会触发uni.onWifiConnected
预期结果:
- 希望不要开定位也能执行uni.onWifiConnected
- 希望能够支持安卓10以上 和ios ,ssid直连
- 如果是手动连接,希望跳到系统wifi设置页面的时候,再这里做更改也能触发uni.onWifiConnected
实际结果:
uni.onWifiConnected 没有返回 更改后wifi的数据
bug描述:
发现不执行的原因了, 必须要开定位,才能执行uni.onWifiConnected,但是开定位这个,文档也没有说。
还有就是 android10 以下版本支持直连,android 10以上,包括鸿蒙系统仅支持 maunal 手动链接 手动连接有个问题 ,就是在设置页面改成其它wifi ,不能立马监听执行uni.onWifiConnected,而是从设置网络页面返回到app页面,然然后再进去设置wifi页面,uni.onWifiConnected才会执行。
Android以上直连只能通过写插件形式去实现了,uts和原生插件都可以
在uni-app中,uni.onWifiConnected
用于监听设备连接到 Wi-Fi 网络的事件。如果你发现该事件没有执行,可能是由于几个原因造成的,例如权限问题、设备不支持、事件注册时机不对等。以下是一些排查和示例代码,帮助你更好地理解和使用这个API。
1. 检查权限
确保你的应用有访问网络状态的权限。在manifest.json中配置必要的权限:
"mp-weixin": { // 以微信小程序为例,其他平台类似
"permission": {
"scope.userInfo": {
"desc": "你的位置信息将用于小程序网络状态管理"
}
}
}
注意:不同平台(如App、H5、小程序等)的权限配置方式可能有所不同,请参照对应平台的文档。
2. 注册事件
确保你在正确的生命周期函数中注册了uni.onWifiConnected
事件。通常,你可以在onLaunch
或onShow
中注册它:
// 在App.vue或页面的onLaunch/onShow中注册事件
export default {
onLaunch() {
uni.onWifiConnected(function (res) {
console.log('Wi-Fi已连接', res);
// 处理Wi-Fi连接成功的逻辑
});
},
// 其他代码...
}
3. 监听Wi-Fi状态变化
为了更全面地了解Wi-Fi状态,你可以同时监听uni.onWifiConnected
和uni.onWifiDisconnected
事件:
export default {
onLaunch() {
uni.onWifiConnected(function (res) {
console.log('Wi-Fi已连接', res);
});
uni.onWifiDisconnected(function (res) {
console.log('Wi-Fi已断开', res);
});
},
// 其他代码...
}
4. 使用条件编译
如果你的应用需要在多个平台运行,考虑使用条件编译来确保只在支持的平台上注册这些事件:
export default {
onLaunch() {
#ifdef APP-PLUS || MP-WEIXIN // 仅针对App和小程序平台
uni.onWifiConnected(function (res) {
console.log('Wi-Fi已连接', res);
});
#endif
// 其他代码...
},
// 其他代码...
}
5. 调试和日志
如果以上步骤仍然无法解决问题,增加更多的日志输出,检查是否有其他代码干扰了事件的注册和执行。同时,确保你的设备Wi-Fi功能正常,且应用有正确的网络访问权限。
通过上述步骤和代码示例,你应该能够更有效地排查和解决uni.onWifiConnected
不执行的问题。如果问题依旧存在,建议查阅最新的uni-app官方文档或社区论坛寻求更多帮助。