小明MMM
小明MMM
  • 发布:2019-03-04 10:55
  • 更新:2022-03-22 09:10
  • 阅读:8952

【报Bug】蓝牙api调用uni.getBLEDeviceServices打印出的services是空的

分类:uni-app

详细问题描述(DCloud产品不会有明显的bug,所以你遇到的问题大都是在特定环境下才能重现的问题,请仔细描述你的环境和重现方式,否则DCloud很难排查解决你的问题)
[内容]
调用uni.getBLEDeviceServices,返回{"services":[],"errMsg":"getBLEDeviceServices:ok","errCode":0};为什么services是空的,当执行下一步uni.getBLEDeviceCharacteristics的时候,返回{"errMsg":"getBLEDeviceCharacteristics:fail no service","errCode":10004};报10004的错误,意思是没有找到指定服务

重现步骤
[步骤]蓝牙已经连接成功,获取特征值的时候就报错了
[结果]
[期望]
[如果语言难以表述清晰,可以拍一个视频或截图,有图有真相]

IDE运行环境说明
[HBuilder 或 HBuilderX]HBuilderX
[IDE版本号]
[windows版本号]
[mac版本号]

App运行环境说明
[Android版本号]2019022801
[iOS版本号]
[手机型号]
[模拟器型号]

附件
[IDE问题请提供HBuilderX运行日志。菜单帮助-查看运行日志,点右键打开文件所在目录,将log文件压缩成zip包上传]
[App问题请提供可重现问题的代码片段,你补充的细一点,问题就解决的快一点]
[安装包]

联系方式
[QQ]932557364

2019-03-04 10:55 负责人:无 分享
已邀请:
小明MMM

小明MMM (作者)

已解决

状态的状zhuang

状态的状zhuang

我的是电子称,同样的不延迟肯定空数组,延迟后有时拿到有时拿不到。uuid是厂家有提供直接写死的,直接 uni.notifyBLECharacteristicValueChange 的时候也需要加延迟,但是也会出现失败。只要 uni.getBLEDeviceServices 能拿到数据,notify就能成功。
搞不懂怎么操作才能稳定notify监听数据。,即使判断空数组后,递归 getBLEDeviceServices 也还是拿不到。

了了_

了了_

遇到同样的问题,求解

  • 小明MMM (作者)

    调用uni.getBLEDeviceServices的时候给个setTimeout,延时600-1000ms,这样就能拿到特征值

    2019-03-11 13:44

  • 2***@qq.com

    回复 小明MMM: 多谢!

    2020-10-12 14:00

  • 7***@qq.com

    加了定时器也没有用

    2021-01-12 13:31

轨道已开

轨道已开 - 90后it男

楼主,我给了延迟还是找不到服务,这是为什么啊

  • 小明MMM (作者)

    那就久一点,2000ms-3000ms试一试

    2019-04-08 18:05

  • 轨道已开

    回复 小明MMM:我的蓝牙好像是,第一次连接上了后,调用uni.onBLECharacteristicValueChange的时候会弹出来输入配对密码,然后就没有反应了,重新连接就报10004了,除非其他人连接上在断开,我才可以重新获取到

    2019-04-09 09:14

情疏

情疏 - 情疏

多谢楼主!

7***@qq.com

7***@qq.com

楼主我也是报这个错误,我都给到了 5000ms 还是这样1.
-createBLEConnection() {
//设备deviceId
let deviceId = this.deviceId;
let self = this;
uni.createBLEConnection({
// 这里的 deviceId 需要已经通过 createBLEConnection 与对应设备建立链接
deviceId,
success: res => {
console.log("设备连接成功!");
//延迟1.5s获取设备的services
setTimeout(function() {
console.log("获取设备的services");
self.getBLEDeviceServices();
}, 5000);
},
fail: res => {
console.log(JSON.stringify(res));
console.log("设备连接失败!");
}
});
},

getBLEDeviceServices() {
let deviceId = this.deviceId;
let serviceList = [];
let self = this;
console.log("进入设备服务方法")
uni.getBLEDeviceServices({
// 这里的 deviceId 需要已经通过 createBLEConnection 与对应设备建立链接
deviceId,
success: res => {
console.log(JSON.stringify(res));
serviceList = res.services;
for (let i = 0; i < serviceList.length; i++) {
let service = serviceList[i];
console.log(JSON.stringify(service) + "----serviceID:" + service.uuid);
//比对service是否是FFF0服务
if (service.uuid.indexOf(self.primaryUUID) != -1) {
self.serviceId = service.uuid;
console.log("设备的serviceId: " + self.serviceId);
//开始获取指定服务的特征值
self.getBLEDeviceCharacteristics();
break;
}
}
},
fail: res => {
console.log('device services:', JSON.stringify(res))
}
});
},

  • 3***@qq.com

    延时器 加在uni.getBLEDeviceServices 外面一层

    2023-03-09 10:03

树袋

树袋

谢谢!加延时搞定了

十八线程序员

十八线程序员

加了延时好像还是没有效果

浮休

浮休 - 浮休

谢谢,加了延迟取到了,但是后面uni.writeBLECharacteristicValue往蓝牙发数据时返回"errMsg": "writeBLECharacteristicValue:ok"蓝牙却没有响应...

小E

小E

方法都加1s延迟试试,请问你怎么解决多次触发响应回调问题的

  • 小E

    已经搞定,回调方法只创建调用一次,就能解决多次触发的bug

    2020-09-08 14:27

6***@qq.com

6***@qq.com - 清风徐来

我手机是稳定连接,但是 PAD 安卓7.0.4 是稳定不行

jrexe

jrexe

加了延时搞定了 , 应该是安卓外设初始化需要时间把 不同的硬件厂商

还发现 iOS和 Android 的同一个BLE设备的 的devId是不一样的

7***@qq.com

7***@qq.com

加延迟也获取不到,。怎么解决的

冥月界花

冥月界花

PDA加了延迟也获取不到,大佬有解决了嘛

  • jrexe

    改一下加载顺序,还有就是定位打开没

    2021-03-10 01:15

状态的状zhuang

状态的状zhuang

我的是电子称,同样的不延迟肯定空数组,延迟后有时拿到有时拿不到。uuid是厂家有提供直接写死的,直接 uni.notifyBLECharacteristicValueChange 的时候也需要加延迟,但是也会出现失败。只要 uni.getBLEDeviceServices 能拿到数据,notify就能成功。
搞不懂怎么操作才能稳定notify监听数据。,即使判断空数组后,递归 getBLEDeviceServices 也还是拿不到。

2***@qq.com

2***@qq.com - 我叫王乜乜,大家可以叫我王野野,不过我比较喜欢叫王托托,不过我真正叫王大仙!

奇怪,系有呢蓝牙得,又呢蓝牙又矛得,乜水知道系做乜野甘样果嘛

Azikou

Azikou

我延迟了15秒还是不行。。

  • 3***@qq.com

    大佬 你解决没有啊 我也是延迟了 始终是一个空的数组

    2021-09-21 12:05

  • Azikou

    回复 3***@qq.com: 换个设备。。我是之前的荣耀V10的缘故,一直获取不到。换了小米的。延迟2-3S就行了

    2021-09-22 08:21

  • 7***@qq.com

    回复 1***@qq.com: 是的,有的设备不行,但是有的可以

    2021-10-08 14:42

一嘿

一嘿

类似问题:同一个蓝牙安卓获取到4个但是IOS只能获取到1个服务

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