收藏
回答

BLE 蓝牙的 wx.getBLEDeviceServices()接口在ios端上只能返回3条数据?

同样的逻辑代码,在设备connect之后,调用wx.getBLEDeviceServices()接口,ios端上只能返回3条service uuid信息,android端上可以返回全部5条service uuid信息。 使用官方的代码片段只是添加了打印信息,在wx.getBLEDeviceServices()中也是只能打印出3条service 的uuid。是ios端上丢失了service 的uuid吗?还是可以怎么设置,让ios也接收全部5个service uuid?。在论坛上好像发现也有人出现这个情况,https://developers.weixin.qq.com/community/develop/doc/00086af5978e886b03cac99ca5e400 这么久了,没有解决方案吗?别说写死uuid进行读写,ios端需要先进行一次getBLEDeviceServices 和一次 getBLEDeviceCharacteristics 而且是要找到需要用的uud ,下面的读写操作才能正常运行。写死是不管用的,直接会报10004 no service。我也不提供代码,官方的demo直接加打印就看到了。

回答关注问题邀请回答
收藏

4 个回答

  • 圆规
    圆规
    10-11

    没想道21年的问题 24年的我还深受其害啊,依旧迷茫中

    10-11
    有用
    回复
  • 周超
    周超
    2022-08-31

    解决了吗兄弟

    2022-08-31
    有用
    回复
  • Arsiz
    Arsiz
    2021-09-07

    我遇到过你这个问题,时间比较久解决办法有点忘了,你可以自己去看下,https://github.com/arsize/ble,大概是用promise按次数嗅探,达到次数之后再停止,这个问题的出现的确和延时有关,但是单纯用延时函数好像没什么作用。另外你上面说的uuid写死没用,其实也不对,如果你们和硬件是1对1的确认关系,是可以写死的,省了中间嗅探的步骤速度会加快不少,我就是写死的,线上已经运行一年了没什么问题。

    2021-09-07
    有用
    回复
  • Cjiang
    Cjiang
    2021-07-06

    这里设备的service是否是在连接上之后有更新?如果是的话是已知问题,建议先延时个5s后重新调用一下getBLEDeviceServices来规避,未来会加一个service更新事件通知service更新时机

    2021-07-06
    有用
    回复 1
    • 深纯黑色
      深纯黑色
      2021-07-06
      连接后没更新的,延迟调用getBLEDeviceServices这个方式也试过了,ios端还是只能返回3个service uuid。而且在一开始的测试时并没有做延迟,但是android端还是能收到全部的5个service uuid。所以应该不是连接后有更新的这个问题。如果是这个问题的话那么android端应该也会出现只会返回3个service uuid这种情况才对,但是事实并非如此。
      2021-07-06
      回复
登录 后发表内容