uni-app 【报Bug】uni.onGetWifiList 获取的 SSID 变为了小写 sSID 导致原有代码获取不到 SSID
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"
}
操作步骤
- 开启手机的开发者模式并关闭 wifi 节能模式。
- 初始化 wifi 模块。
- 顺序调用
uni.getWifiList
、uni.onGetWifiList
。 - 获取
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,代码报错。
4 回复
没有,uniapp 的人根本不管的,这个 bug 在 10 月份就有人提了,自己兼容一下吧,谨慎升级 uniapp 或 hbuildr 的版本
我昨天也被这个坑了 原来用的编辑器版本是正常的 后来升级了一下版本,就出现这个问题,无语的很
在处理 uni-app
中 uni.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);
}
});
在上面的代码中,我们做了以下几点:
- 使用
uni.onGetWifiList
监听WiFi列表的变化。 - 在回调函数的
success
分支中,处理返回的wifiList
。 - 使用
map
方法遍历wifiList
,将每个wifi
对象的sSID
(如果存在)或SSID
(如果存在)转换为大写,并存储在新的对象中。 - 使用处理后的
processedWifiList
进行后续的逻辑处理,比如查找特定的SSID。
这种方法可以确保即使 uni.onGetWifiList
返回的SSID格式有所变化,我们的代码也能够正确识别和处理它。同时,这种方法也保持了代码的灵活性和健壮性,适应未来可能的变化。