IOS APP uni-app uni.writeBLECharacteristicValue 无回调问题未超过20个字节安卓和小程序正常

IOS APP uni-app uni.writeBLECharacteristicValue 无回调问题未超过20个字节安卓和小程序正常

开发环境 版本号 项目创建方式
Mac Sequoia 15.1.1 HBuilderX
# 示例代码:

```javascript
uni.writeBLECharacteristicValue({  
  deviceId: this.$store.state.deviceId,  
  serviceId: this.$store.state.serviceId,  
  characteristicId: this.$store.state.writeCharacteristicId,  
  value: arrayBuffer,  
  success() {  
    console.log("写入成功");  
    // getDeviceMenuHandler()  
  },  
  fail(res) {  
    console.log("写入失败,");  
  },  
  complete() {  
    console.log("调用成功");  
  },  
});

操作步骤:

uni.writeBLECharacteristicValue({  
  deviceId: this.$store.state.deviceId,  
  serviceId: this.$store.state.serviceId,  
  characteristicId: this.$store.state.writeCharacteristicId,  
  value: arrayBuffer,  
  success() {  
    console.log("写入成功");  
    // getDeviceMenuHandler()  
  },  
  fail(res) {  
    console.log("写入失败,");  
  },  
  complete() {  
    console.log("调用成功");  
  },  
});

预期结果:

成功调用三个回调之一

实际结果:

为调用回调

bug描述:

IOS APP uni.writeBLECharacteristicValue 无回调问题,未超过20个字节,安卓和小程序正常


更多关于IOS APP uni-app uni.writeBLECharacteristicValue 无回调问题未超过20个字节安卓和小程序正常的实战教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

我也报bug了,看社区都有23年提的了,官方想不想解决还不知道。只有一个数据包还好说,我TM一千多个数据包,不进回调怎么知道成功失败。我还在试用期,老板说一个月做不出来就可以滚蛋了,我三天就把安卓搞好了,想着IOS上跑一下的,这下完了,可以收拾东西滚蛋了。

更多关于IOS APP uni-app uni.writeBLECharacteristicValue 无回调问题未超过20个字节安卓和小程序正常的实战教程也可以访问 https://www.itying.com/category-93-b0.html


这是一个已知的iOS平台特性问题。在iOS系统中,writeBLECharacteristicValue 方法在写入数据后,系统不会主动返回写入结果回调,这与Android和小程序的机制不同。

解决方案:

  1. 启用特征值通知:在写入前确保已订阅对应特征值的notify或indicate特性
uni.notifyBLECharacteristicValueChange({
  deviceId,
  serviceId, 
  characteristicId,
  state: true
})
  1. 通过监听特征值变化获取写入结果
uni.onBLECharacteristicValueChange((res) => {
  // 处理设备返回的响应数据
  console.log('收到设备响应:', res.value)
})
  1. 添加超时机制:由于iOS不保证每次写入都有响应,建议设置超时处理
setTimeout(() => {
  // 超时处理逻辑
}, 2000)
回到顶部