uni-app中uni.onWifiConnected不执行

发布于 1周前 作者 sinazl 来自 Uni-App

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>

操作步骤:

  1. 先不打开系统定位,点击“连接wifi”。可以看到不会触发uni.onWifiConnected
  2. 打开定位,点击“连接wifi”。可以看到会触发uni.onWifiConnected
  3. 打开定位,点击“连接wifi”。 到设置页面上改成其它wifi,不会触发uni.onWifiConnected,然后点击返回到app界面,然后再点击“连接wifi”,才会触发uni.onWifiConnected

预期结果:

  1. 希望不要开定位也能执行uni.onWifiConnected
  2. 希望能够支持安卓10以上 和ios ,ssid直连
  3. 如果是手动连接,希望跳到系统wifi设置页面的时候,再这里做更改也能触发uni.onWifiConnected

实际结果:

uni.onWifiConnected 没有返回 更改后wifi的数据

bug描述:

发现不执行的原因了, 必须要开定位,才能执行uni.onWifiConnected,但是开定位这个,文档也没有说。

还有就是 android10 以下版本支持直连,android 10以上,包括鸿蒙系统仅支持 maunal 手动链接 手动连接有个问题 ,就是在设置页面改成其它wifi ,不能立马监听执行uni.onWifiConnected,而是从设置网络页面返回到app页面,然然后再进去设置wifi页面,uni.onWifiConnected才会执行。


2 回复

Android以上直连只能通过写插件形式去实现了,uts和原生插件都可以


在uni-app中,uni.onWifiConnected 用于监听设备连接到 Wi-Fi 网络的事件。如果你发现该事件没有执行,可能是由于几个原因造成的,例如权限问题、设备不支持、事件注册时机不对等。以下是一些排查和示例代码,帮助你更好地理解和使用这个API。

1. 检查权限

确保你的应用有访问网络状态的权限。在manifest.json中配置必要的权限:

"mp-weixin": { // 以微信小程序为例,其他平台类似
  "permission": {
    "scope.userInfo": {
      "desc": "你的位置信息将用于小程序网络状态管理"
    }
  }
}

注意:不同平台(如App、H5、小程序等)的权限配置方式可能有所不同,请参照对应平台的文档。

2. 注册事件

确保你在正确的生命周期函数中注册了uni.onWifiConnected事件。通常,你可以在onLaunchonShow中注册它:

// 在App.vue或页面的onLaunch/onShow中注册事件
export default {
  onLaunch() {
    uni.onWifiConnected(function (res) {
      console.log('Wi-Fi已连接', res);
      // 处理Wi-Fi连接成功的逻辑
    });
  },
  // 其他代码...
}

3. 监听Wi-Fi状态变化

为了更全面地了解Wi-Fi状态,你可以同时监听uni.onWifiConnecteduni.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官方文档或社区论坛寻求更多帮助。

回到顶部