收藏
回答

低功耗蓝牙wx.getBLEDeviceServices接口问题

问题模块 框架类型 问题类型 API/组件名称 终端类型 微信版本 基础库版本
API和组件 小程序 Bug wx.getBLEDeviceServices 客户端 7.0.3 2.6.2

- 当前 Bug 的表现(可附上截图)

使用wx.createBLEConnection连接BLE设备后,接着使用wx.getBLEDeviceServices获取服务UUID,获取服务UUID有时候会报错,errCode为:10004(no service),重新调用wx.getBLEDeviceServices接口还是报同样的错误,如果去调用wx.createBLEConnection重新连接设备,会报错,errCode为:-1(already connected)


- 预期表现

wx.createBLEConnection连接设备后,wx.getBLEDeviceServices获取服务UUID应该成功


- 复现路径


- 提供一个最简复现 Demo

createBLEConnection: function (deviceId){

wx.createBLEConnection({

  deviceId: deviceId,

  success: (res) => {

console.log("createBLEConnection success: ", res)

this.getBLEDeviceServices(deviceId)

  },

  fail: (res) => {

console.error("createBLEConnection fail: ", res)

if (res.errCode == -1){

  this.getBLEDeviceServices(deviceId)

}

else {

  wx.showModal({

title: '提示',

content: '连接失败,请稍后重试!',

showCancel: false

  })

}

  }

})

}

getBLEDeviceServices: function (deviceId) {

    wx.getBLEDeviceServices({

      deviceId,

      success: (res) => {

        for (let i = 0; i < res.services.length; i++) {

          if (res.services[i].isPrimary) {

            let serviceId = res.services[i].uuid

            wx.getBLEDeviceCharacteristics({

              deviceId,

              serviceId,

              success: (res) => {

                console.log('getBLEDeviceCharacteristics success: ', res.characteristics)

              },

              fail: (res) => {

                console.error('getBLEDeviceCharacteristics failed: ', res)

              }

            })

            return

          }

        }

      },

      fail: (res) => {

        console.error("getBLEDeviceServices failed: ", res)

        if (res.errCode == 10004){

          wx.showLoading({

            title: '设备连接出错,自动重连中',

          })

          setTimeout(() => {

            let _deviceId = deviceId

            this.createBLEConnection(_deviceId)

//this.getBLEDeviceServices(_deviceId)

          }, 1000)

        }

      }

    })

}


最后一次编辑于  03-07
回答关注问题邀请回答
收藏

3 个回答

  • 社区技术运营专员-娇华
    社区技术运营专员-娇华
    03-07

    请提供一下出现问题的机型和微信版本,以及能复现问题的简单代码片段(https://developers.weixin.qq.com/miniprogram/dev/devtools/minicode.html)。

    03-07
    赞同
    回复 15
    • XYZ
      XYZ
      03-07

      手机型号小米MIX2S,设备是一个双模蓝牙,复现问题的代码暂时只有我上面贴出来的,项目代码不方便全放上来。


      有一个现象是,双模蓝牙里面的BLE跟小程序连接比较费时间,特别是在经典蓝牙连接了手机,并且手机通过蓝牙在放歌的时候,小程序BLE的连接会很不稳定

      03-07
      回复
    • XYZ
      XYZ
      03-07

      另外,出现出现这问题后,用nrf connect这个APP是能正常连上设备并收发数据的

      03-07
      回复
    • Tummy
      Tummy
      03-07回复XYZ
      1. 原生的BLE App能正常运行么...

      2. 我->设置->帮助与反馈->右上角扳手上传日志,并提供微信号与时间点哈。

        ---

              来个日志看看.

      03-07
      回复
    • XYZ
      XYZ
      03-07

      nrf connect这个APP就是原生BLE APP,日志上传了

      03-07
      回复
    • XYZ
      XYZ
      03-11回复Tummy

      兄弟,我在社区里面搜到好几个跟我类似的问题,你们都没回答啊。。。。。

      我表示对你们使用的安卓BLE底层库有点怀疑啊,参考一下这个吧:https://github.com/NordicSemiconductor/Android-BLE-Library

      nordic这家的BLE做的是最好的,

      期待你们尽快回复啊

      03-11
      1
      回复
    查看更多(10)
  • 游子
    游子
    11-11

    请问下楼主这个问题解决了吗?连接低功耗蓝牙也会报错

    11-11
    赞同
    回复 2
    • XYZ
      XYZ
      11-11
      没解,这个坑没法完全规避掉了,只能尽量优化吧
      11-11
      回复
    • 游子
      游子
      11-11回复XYZ
      我滴个乖乖
      11-11
      回复
  • XYZ
    XYZ
    05-27

    1、我用的双模蓝牙,经典蓝牙连接着时,小程序连接BLE就会这样,经典蓝牙不连接时,没有问题,用Nrf Connect来测试,也没有问题;

    2、复现问题用官方提供的Demo就可以,https://github.com/wechat-miniprogram/miniprogram-demo/issues/15#issue-449040236


    05-27
    赞同
    回复