金荷娜
金荷娜
  • 发布:2021-01-12 16:43
  • 更新:2023-07-14 15:48
  • 阅读:4295

uni.getBLEDeviceServices android 下无法获取不到services(急急急)

分类:uni-app

getBLEDeviceServices(device) {
console.log('承德信息deviceId',device)
setTimeout(()=>{
uni.getBLEDeviceServices({
deviceId: device,
success: res => {
console.log('getBLEDeviceServices获取蓝牙设备服务', res);//services返回为[]数组
// getBluetoothDevices 获取的有 deviceId 和 advertisServiceUUIDs,可以在这里获取的服务列表中选择一个一样的作为后续 API 请求的服务id,这个 id 需要满足是否可读
// this.setData({
// services: res.services,
// serviceId: res.services[0].uuid // 假设是第一个
// });
//this.services =res.services
//this.serviceId =res.services[0].uuid // 假设是第一个
// this.getBLEDeviceCharacteristics(); // (6) 获取特征值

                    // // 官方 demo  
                    for (var i = 0; i < res.services.length; i++) {  
                        // 该服务是否为主服务  
                        if (res.services[i].isPrimary) {  
                            this.getBLEDeviceCharacteristics(res.services[i].uuid);  
                        }  
                    }  
                },  
                fail: err => {  
                    console.log('getBLEDeviceServices获取蓝牙设备服务失败:', err);  
                }  
            },1500);  
        })  
    },
2021-01-12 16:43 负责人:无 分享
已邀请:
1***@139.com

1***@139.com

试验证明. android在连接成功后, 需要 settimout 1秒后, 执行uni.getBLEDeviceServices才有作用.
但是影响了我读取数据的速度.. .希望官方尽快处理

  • typhcl

    亲测有效 多谢大佬

    2022-01-13 10:40

7***@qq.com

7***@qq.com

在小程序里不行?

  • 金荷娜 (作者)

    app里不行 小程序 可以

    2021-01-12 16:47

  • 7***@qq.com

    回复 金荷娜: 我猜测小程序也是可以,安卓不行

    2021-01-12 16:52

  • 2***@qq.com

    回复 金荷娜: 你试一下在蓝牙后台有没有连接其他的蓝牙,把连接的蓝牙关闭再试一下

    2021-01-27 12:31

冥月界花

冥月界花

{"services":[],"errMsg":"getBLEDeviceServices:ok"},获取到空值也是ok,卡了好久了,解决不了,不知道为什么

  • 3***@qq.com

    大佬 你解决了没有啊

    2021-09-21 12:11

  • 5***@qq.com

    回复 3***@qq.com: 试试给延迟?我这边app的给了延迟是可以的

    2021-10-09 18:28

1***@139.com

1***@139.com

{errMsg: "getBLEDeviceCharacteristics:fail no service", errCode: 10004, code: 10004}
code: 10004
errCode: 10004
errMsg: "getBLEDeviceCharacteristics:fail no service"

遇到一样的问题.
iOS app可以,
安卓APP不行.
安卓和iOS的小程序可以.
蓝牙权限已经开启了. 可以搜索和连接. 就是无法读写.

  • 1***@139.com

    打断点, 停止一会, 就能成功.

    初步估计

    1,. 是连接成功后, 马上发起这个函数, 太快的原因. 尝试settimeout延迟一下.



    1. 扫描没有停止. 修改扫描机制.不要重复上报试试.

      .....

    2021-01-26 11:16

  • 9***@qq.com

    回复 1***@139.com: 没用,实际情况是只有第一次可以返回serviceid,后续不行,需要关闭蓝牙等几分钟,但是到下一步uuid也返回no

    2023-03-14 11:51

2***@qq.com

2***@qq.com - nblvdong

也遇到这个问题,加了延迟也不稳定;亲测基本上连好多次才可能获取到一次服务IDS,怎么弄哈

  • 1***@qq.com

    循环调用,service.length>0停止

    2022-11-14 10:01

非衣

非衣 - 前端

你好,您那个services为空的问题解决了吗?我也遇见了

  • a***@163.com

    我也遇见了 请问解决了嘛

    2023-02-25 14:46

  • 3***@qq.com

    回复 a***@163.com: 哥呀,我前些天测试很稳定,最近也出现这个问题了,而且无解。您这里解决了吗?

    2023-06-18 22:47

時來

時來 - 15289682517(MJ682517)

函数自调也可以解决
比用定时器好一些

getServices() {  
            let that = this;  

            uni.getBLEDeviceServices({  
                deviceId: that.deviceId,  
                success(res) {  
                    that.sevicesList = res.services;  

                                        console.log('蓝牙服务列表: ', that.sevicesList);  
                },  
                fail(err) {  
                    console.error('蓝牙服务列表err: ', err);  
                }  
            });  
        }

要回复问题请先登录注册