uni-app 【报Bug】uni.onGetWifiList 获取的 SSID 变为了小写 sSID 导致原有代码获取不到 SSID

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

uni-app 【报Bug】uni.onGetWifiList 获取的 SSID 变为了小写 sSID 导致原有代码获取不到 SSID

产品分类

uniapp/App

开发环境信息

项目 详情
PC开发环境操作系统 Mac
PC开发环境版本号 13.3.1 (22E261)
HBuilderX类型 正式
HBuilderX版本号 4.36
手机系统 Android
手机系统版本号 Android 14
手机厂商 小米
手机机型 小米 11
页面类型 vue
vue版本 vue2
打包方式 云端
项目创建方式 HBuilderX

示例代码

{
    "frequency": 2412,
    "sSID": "ChinaNet-7rgY",
    "secure": true,
    "signalStrength": -65,
    "securityType": "WPA",
    "bSSID": "24:7e:51:a0:75:60"
}

操作步骤

  1. 开启手机的开发者模式并关闭 wifi 节能模式。
  2. 初始化 wifi 模块。
  3. 顺序调用 uni.getWifiListuni.onGetWifiList
  4. 获取 uni.onGetWifiList 的回调参数。

预期结果

{
    "frequency": 2412,
    "SSID": "ChinaNet-7rgY",
    "secure": true,
    "signalStrength": -65,
    "securityType": "WPA",
    "BSSID": "24:7e:51:a0:75:60"
}

实际结果

{
    "frequency": 2412,
    "sSID": "ChinaNet-7rgY",
    "secure": true,
    "signalStrength": -65,
    "securityType": "WPA",
    "bSSID": "24:7e:51:a0:75:60"
}

bug描述

根据 uni.onGetWifiList 获取 wifi 信息的回调,在回调信息中取 BSSID 字段。现在返回的结果为 bSSID, 首字母小写,导致线上应用获取不到 BSSID,代码报错。

图片1 图片2


4 回复

解决了吗 哥


没有,uniapp 的人根本不管的,这个 bug 在 10 月份就有人提了,自己兼容一下吧,谨慎升级 uniapp 或 hbuildr 的版本

我昨天也被这个坑了 原来用的编辑器版本是正常的 后来升级了一下版本,就出现这个问题,无语的很

在处理 uni-appuni.onGetWifiList 获取到的 SSID 变为小写的问题时,我们需要确认这是否是由于框架的一个bug或者是API行为变更导致的。不过,不论原因如何,我们可以通过编程的方式来解决这个问题,以确保代码能够正确处理和获取 SSID。

首先,我们可以编写一个函数来标准化从 uni.onGetWifiList 返回的SSID,将其转换为预期的大小写格式(通常是大写)。以下是一个示例代码,展示了如何在 uni-app 中处理这个问题:

// 监听WiFi列表变化
uni.onGetWifiList({
    success: function (res) {
        // 假设res.wifiList是返回的WiFi列表
        const wifiList = res.wifiList || [];
        
        // 处理SSID变为小写的问题
        const processedWifiList = wifiList.map(wifi => {
            // 将sSID转换为SSID,并统一为大写
            const ssid = (wifi.sSID || wifi.SSID || '').toUpperCase();
            // 返回一个新的对象,包含处理过的SSID
            return {
                ...wifi,
                SSID: ssid
            };
        });

        // 现在processedWifiList中的每个对象都应该有正确的SSID(大写)
        console.log('Processed WiFi List:', processedWifiList);

        // 原有的代码逻辑可以基于processedWifiList进行处理
        // 例如,根据SSID查找特定的WiFi
        const specificWifi = processedWifiList.find(wifi => wifi.SSID === 'YOUR_EXPECTED_SSID');
        if (specificWifi) {
            console.log('Found specific WiFi:', specificWifi);
        } else {
            console.log('Specific WiFi not found');
        }
    },
    fail: function (err) {
        console.error('Failed to get WiFi list:', err);
    }
});

在上面的代码中,我们做了以下几点:

  1. 使用 uni.onGetWifiList 监听WiFi列表的变化。
  2. 在回调函数的 success 分支中,处理返回的 wifiList
  3. 使用 map 方法遍历 wifiList,将每个 wifi 对象的 sSID(如果存在)或 SSID(如果存在)转换为大写,并存储在新的对象中。
  4. 使用处理后的 processedWifiList 进行后续的逻辑处理,比如查找特定的SSID。

这种方法可以确保即使 uni.onGetWifiList 返回的SSID格式有所变化,我们的代码也能够正确识别和处理它。同时,这种方法也保持了代码的灵活性和健壮性,适应未来可能的变化。

回到顶部