uni.getBLEDeviceServices({
deviceId: deviceId,
success: (e) => {
console.log(deviceId+"======搜索服务成功 ", e.services.length);
if (e.services.length == 0) {
setTimeout(e=>{//有时候会断开连接成功但是没有改变状态的回调onBLEConnectionStateChange
uni.closeBLEConnection({
deviceId: deviceId,
success: (e)=>{
console.log("断开接口调用成功: ",deviceId);
},
fail: (err)=>{
console.log(err);
}
})
}, 500)
return;
}
e.services.forEach((service)=>{
//console.log(service);
if (service.uuid.startsWith(peripheral.headuartServiceUUID)){
// we only need uart service
_this.searchCharacteristic(deviceId, service.uuid);
peripheral.uartService = service;
}
})
},
fail: (err) => {
}
})
- 发布:2022-06-29 11:28
- 更新:2022-06-29 11:28
- 阅读:270
产品分类: uniapp/App
PC开发环境操作系统: Mac
PC开发环境操作系统版本号: 12.4 (21F79)
HBuilderX类型: 正式
HBuilderX版本号: 3.4.15
手机系统: Android
手机系统版本号: Android 9.0
手机厂商: AUTOID pad air
手机机型: 无
页面类型: vue
vue版本: vue3
打包方式: 云端
项目创建方式: HBuilderX
示例代码:
操作步骤:
按照文档的流程来就行
按照文档的流程来就行
预期结果:
在搜索到服务数量为0后断开连接, 理应触发uni.onBLEConnectionStateChange
回调, 因为此时设备已经连接成功, 理应可以断开连接
在搜索到服务数量为0后断开连接, 理应触发uni.onBLEConnectionStateChange
回调, 因为此时设备已经连接成功, 理应可以断开连接
实际结果:
在调用uni.closeBLEConnection
接口后, 接口调用成功的回调被触发, 但是uni.onBLEConnectionStateChange
的回调一直没有被触发
在调用uni.closeBLEConnection
接口后, 接口调用成功的回调被触发, 但是uni.onBLEConnectionStateChange
的回调一直没有被触发
bug描述:
连接步骤按照uniapp的文档来的
适配器, 搜索, 连接, 查找服务
连接成功回调后1.5秒开始查找服务(否则服务数频繁为0)
即便如此, 依然会偶现服务数为0的情况, 此时应该怎么做?
我目前的解决办法是断开连接再重新连接, 因为如果不断开连接, 再次查找服务(递归), 依然会是0,
但是此时断开连接的接口调用以后, 蓝牙连接状态改变的回调不会被触发
并且之后无论何时调用, 都不会被触发
已测试:
在搜索到服务, 并搜索到所有特征值之后, 再断开连接的话, 是没有问题的.
0 个回复