收藏
回答

IOS调用wx.writeBLECharacteristicValue后无回调函数,之后蓝牙断开?

  // 开始读取设备信息
  startReadDeviceInfo() {    
    // 先启用设备信息特征值的通知监听
    wx.notifyBLECharacteristicValueChange({
      deviceIdthis.data.device.deviceId,
      serviceIdthis.data.serviceId,
      characteristicIdthis.data.readCharacteristicId,
      statetrue,
      success(res) => {
        console.log('启用设备信息通知成功,开始触发分包数据');
        
        // 延迟一下再触发分包数据
        setTimeout(() => {
          this.triggerDeviceInfoPackets();
        }, 500);
      },
      fail(err) => {
        console.error('启用设备信息通知失败:', err);
        wx.hideLoading();
        wx.showToast({ title'启用通知失败'icon'error' });
      }
    });
  },

  // 触发设备信息分包数据
  triggerDeviceInfoPackets() {
    console.log('触发设备信息分包数据...');
    
    // 向触发特征值写入1来触发分包数据
    const triggerData = new ArrayBuffer(1);
    const uint8Array = new Uint8Array(triggerData);
    uint8Array[0] = 0x01// 写入1触发分包
    
    wx.writeBLECharacteristicValue({
      deviceIdthis.data.device.deviceId,
      serviceIdthis.data.serviceId,
      characteristicIdthis.data.deviceInfoTriggerCharacteristicId,
      value: triggerData,
      success(res) => {
        console.log('触发设备信息分包成功,等待分包数据...');
        this.setData({ deviceInfoPacketTimeoutId: packetTimeout });
      },
      fail(err) => {
        console.error('触发设备信息分包失败:', err);
        wx.hideLoading();
        wx.showToast({ title'触发分包失败'icon'error' });
        
      }
    });
  },

关键代码以及版本如上,先notify后再写入,控制台打印了”触发设备信息分包数据...“后再无反应,success跟fail的回调都没有触发,请问是什么原因?

其他信息:另一台安卓手机是正常的;数据超过20字节,原本是直接read,ios会出现read后直接卡住无回调的情况;查找资料后发现可能是数据过大的原因,改成现在的notify加write触发,每个包都是 20字节,还是有以上情况;BLE服务器是自定义的,可能是服务器端需要修改?

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

2 个回答

登录 后发表内容