uni-app uni.onBluetoothDeviceFound在蓝牙异常断开之后再次调用不执行
uni-app uni.onBluetoothDeviceFound在蓝牙异常断开之后再次调用不执行
类型 | 信息 |
---|---|
产品分类 | uniapp/App |
PC开发环境 | Windows |
PC开发环境版本 | 15872101242 |
HBuilderX类型 | 正式 |
HBuilderX版本 | 4.15 |
手机系统 | iOS |
手机系统版本 | iOS 15 |
手机厂商 | 苹果 |
手机机型 | iphone7 |
页面类型 | vue |
vue版本 | vue2 |
打包方式 | 云端 |
项目创建方式 | HBuilderX |
示例代码:
function findBPW(){
console.log('开始查找这个ios设别');
uni.onBluetoothDeviceFound(function(res) {
console.log('88888888888888888888');
if (uni.getStorageSync('activeDevide') == 'BPW2(蓝牙手表)') {
console.log('苹果bpw2');
if (res.devices[0].name == "BPW2") {
let a = ab2hex(res.devices[0].advertisData)
let str = uni.getStorageSync('mac')
let newStr = str.replace(/:/g, '').toLowerCase();
if (a.includes(newStr)) {
console.log('匹配成功');
// 代表匹配上了对应的mac地址
connect(res.devices[0].deviceId)
}
}
} else if (uni.getStorageSync('activeDevide') == 'M90(蓝牙手表)') {
if (res.devices[0].name == "M90") {
let a = ab2hex(res.devices[0].advertisData)
let str = uni.getStorageSync('mac_M90')
let newStr = str.replace(/:/g, '').toLowerCase();
console.log('这是add',a);
console.log('这是str',str);
console.log('这是newStr',newStr);
console.log('这是m90',res.devices[0]);
if (a.includes(newStr)) {
console.log('匹配成功');
// 代表匹配上了对应的mac地址
connect(res.devices[0].deviceId)
}
}
} else {
console.log(uni.getStorageSync('activeDevide'));
}
})
}
操作步骤:
写一套蓝牙连接的代码 尝试使用ios安装基座 连接成功之后关闭蓝牙设备 然后app端检测蓝牙断开 自动尝试重新搜索 这时候就发现无法执行uni.onBluetoothDeviceFound
预期结果:
希望可以执行
实际结果:
ios端不可执行
bug描述:
安卓端正常,ios上,低功耗蓝牙连接成功后,如果将蓝牙设备关机,app端无法再次执行uni.onBluetoothDeviceFound
无任何回调
更多关于uni-app uni.onBluetoothDeviceFound在蓝牙异常断开之后再次调用不执行的实战教程也可以访问 https://www.itying.com/category-93-b0.html
关注相同问题,设备异常断连后,安卓手机端短时间可以用 createBLEConnection 重连上,超过1分钟就彻底连不上了,也搜不到这个设备;
相同是按官方的成对调用createBLEConnection和closeBLEConnection,官方应该修复一下这个BUG,挺严重的,导致很多蓝牙不稳定。
更多关于uni-app uni.onBluetoothDeviceFound在蓝牙异常断开之后再次调用不执行的实战教程也可以访问 https://www.itying.com/category-93-b0.html
解决了吗?
在 uni-app 中,uni.onBluetoothDeviceFound
用于监听蓝牙设备的发现事件。如果你在蓝牙异常断开之后再次调用 uni.startBluetoothDevicesDiscovery
方法时,发现 uni.onBluetoothDeviceFound
不再执行,可能是由于以下几个原因导致的:
1. 蓝牙状态未恢复
在蓝牙异常断开后,蓝牙模块可能处于一个不可用的状态。你需要确保蓝牙模块已经重新初始化并且处于可用状态。
解决方案:
- 在重新调用
uni.startBluetoothDevicesDiscovery
之前,确保蓝牙模块已经重新初始化。你可以通过uni.openBluetoothAdapter
来重新打开蓝牙适配器。
uni.openBluetoothAdapter({
success: () => {
console.log('蓝牙适配器已打开');
uni.startBluetoothDevicesDiscovery({
success: () => {
console.log('开始搜索蓝牙设备');
},
fail: (err) => {
console.error('搜索蓝牙设备失败', err);
}
});
},
fail: (err) => {
console.error('打开蓝牙适配器失败', err);
}
});
2. 事件监听未重新绑定
在蓝牙异常断开后,uni.onBluetoothDeviceFound
的监听事件可能已经被移除或失效。
解决方案:
- 在重新调用
uni.startBluetoothDevicesDiscovery
之前,确保uni.onBluetoothDeviceFound
的监听事件已经重新绑定。
uni.onBluetoothDeviceFound((res) => {
console.log('发现蓝牙设备', res.devices);
});
uni.startBluetoothDevicesDiscovery({
success: () => {
console.log('开始搜索蓝牙设备');
},
fail: (err) => {
console.error('搜索蓝牙设备失败', err);
}
});
3. 蓝牙搜索已被停止
在蓝牙异常断开后,可能之前的蓝牙搜索已经被停止,但没有正确重新启动。
解决方案:
- 确保在重新调用
uni.startBluetoothDevicesDiscovery
之前,之前的蓝牙搜索已经被正确停止。
uni.stopBluetoothDevicesDiscovery({
success: () => {
console.log('停止搜索蓝牙设备');
uni.startBluetoothDevicesDiscovery({
success: () => {
console.log('开始搜索蓝牙设备');
},
fail: (err) => {
console.error('搜索蓝牙设备失败', err);
}
});
},
fail: (err) => {
console.error('停止搜索蓝牙设备失败', err);
}
});
4. 设备或系统问题
有时,设备或系统本身的问题可能导致蓝牙功能无法正常工作。
解决方案:
- 重启设备,或者尝试在其他设备上运行你的应用,以排除设备或系统问题。
5. 权限问题
确保应用已经获得了必要的蓝牙权限。
解决方案:
- 检查并确保应用已经获得了访问蓝牙的权限。你可以在应用的配置文件中添加必要的权限声明。
{
"permission": {
"scope.userLocation": {
"desc": "你的位置信息将用于蓝牙设备搜索"
}
}
}