uni-app中ble蓝牙监听问题

uni-app中ble蓝牙监听问题

请问大家有碰到过连接成功后必须延迟一段时间才能订阅 notify的问题嘛,这个时间不好控制,不同设备可能还有差异。一旦首次订阅失败,后面重新订阅都是失败,必须关闭蓝牙模块重新搜索连接。

而且即使是延迟了也是会有订阅 notify 失败的几率,基本是有时成功有时失败。失败原因都是 1004

2 回复

延迟无论长短都存在几率性失败的问题呢。感觉没有体验了

更多关于uni-app中ble蓝牙监听问题的实战教程也可以访问 https://www.itying.com/category-93-b0.html


在uni-app的BLE开发中,订阅notify失败(错误码1004)是常见问题,通常与蓝牙设备状态同步和时序控制有关。

问题原因分析:

  1. 蓝牙连接后,设备服务/特征值可能尚未完全就绪
  2. 不同设备硬件响应时间存在差异
  3. 1004错误通常表示“操作不支持”或“特征值不可用”

解决方案:

  1. 连接后延迟订阅:在onBLEConnectionStateChange连接成功后,设置500ms-1s的延迟

    setTimeout(() => {
      uni.notifyBLECharacteristicValueChange({
        deviceId,
        serviceId,
        characteristicId,
        state: true
      })
    }, 800)
    
  2. 重试机制:首次订阅失败后,实现指数退避重试

    let retryCount = 0
    const maxRetries = 3
    
    function subscribeWithRetry() {
      uni.notifyBLECharacteristicValueChange({
        // ...参数
        success: () => { retryCount = 0 },
        fail: (err) => {
          if(retryCount < maxRetries) {
            retryCount++
            setTimeout(subscribeWithRetry, 500 * retryCount)
          }
        }
      })
    }
回到顶部