z***@163.com
z***@163.com
  • 发布:2022-06-29 11:28
  • 更新:2022-06-29 11:28
  • 阅读:270

【报Bug, 我的问题, 已改正. 原因是其他地方报错没有提示,被忽略了】蓝牙模块 服务数为0的情况下断开连接, 蓝牙连接状态回调并不会被触发

分类:uni-app

产品分类: uniapp/App

PC开发环境操作系统: Mac

PC开发环境操作系统版本号: 12.4 (21F79)

HBuilderX类型: 正式

HBuilderX版本号: 3.4.15

手机系统: Android

手机系统版本号: Android 9.0

手机厂商: AUTOID pad air

手机机型:

页面类型: vue

vue版本: vue3

打包方式: 云端

项目创建方式: HBuilderX

示例代码:

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) => {  

            }  
        })

操作步骤:

按照文档的流程来就行

预期结果:

在搜索到服务数量为0后断开连接, 理应触发uni.onBLEConnectionStateChange回调, 因为此时设备已经连接成功, 理应可以断开连接

实际结果:

在调用uni.closeBLEConnection接口后, 接口调用成功的回调被触发, 但是uni.onBLEConnectionStateChange的回调一直没有被触发

bug描述:

连接步骤按照uniapp的文档来的
适配器, 搜索, 连接, 查找服务
连接成功回调后1.5秒开始查找服务(否则服务数频繁为0)

即便如此, 依然会偶现服务数为0的情况, 此时应该怎么做?

我目前的解决办法是断开连接再重新连接, 因为如果不断开连接, 再次查找服务(递归), 依然会是0,
但是此时断开连接的接口调用以后, 蓝牙连接状态改变的回调不会被触发

并且之后无论何时调用, 都不会被触发

已测试:
在搜索到服务, 并搜索到所有特征值之后, 再断开连接的话, 是没有问题的.

2022-06-29 11:28 负责人:无 分享
已邀请:

该问题目前已经被锁定, 无法添加新回复