uni-app ios向BLE设备发送数据(uni.writeBLECharacteristicValue),没有回调
uni-app ios向BLE设备发送数据(uni.writeBLECharacteristicValue),没有回调
| 开发环境 | 版本号 | 项目创建方式 |
|---|---|---|
| Mac | 11.6.1 | HBuilderX |
# 操作步骤:
苹果手机连上蓝牙发送数据
# 预期结果:
```javascript
complete: (res) => {
console.log(res)
},
success: (res) => {
console.log(res)
},
fail: (res) => {
console.log(res)
}
会进入这几个回调方法
实际结果:
没有走任何回调
bug描述:
使用uniapi uni.writeBLECharacteristicValue 发送蓝牙数据,实际发送成功了,不走成功(success)或者失败(fail)的回调
更多关于uni-app ios向BLE设备发送数据(uni.writeBLECharacteristicValue),没有回调的实战教程也可以访问 https://www.itying.com/category-93-b0.html
使用苹果6S。14.1系统也不行
更多关于uni-app ios向BLE设备发送数据(uni.writeBLECharacteristicValue),没有回调的实战教程也可以访问 https://www.itying.com/category-93-b0.html
注意文档的说明:若单次写入数据过长,iOS 上存在系统不会有任何回调的情况(包括错误回调)。
解决了,要改成write才行,硬件写的是withoutRes
回复 天亮爱睡觉: 咋解决的哥 我的是有时候有回掉,有时候没回掉
回复 天亮爱睡觉: 是 writeType=‘write’ 吗,我设置了,还是不行
回复 2***@qq.com: 请问解决了吗,我也是有时候回调有时候不回调
回复 天亮爱睡觉: 请问writeBLECharacteristicValue没有任何回调,您是怎么做的可以分享一下吗
在iOS上使用uni.writeBLECharacteristicValue发送BLE数据时没有回调,通常与iOS系统对蓝牙操作的限制有关。以下是可能的原因和解决方案:
-
iOS系统限制:iOS要求蓝牙操作必须在主线程执行,且部分回调可能因系统优化而被延迟或合并。确保在
uni.writeBLECharacteristicValue调用前,设备已通过uni.notifyBLECharacteristicValueChange启用特征值订阅,否则写入可能被系统静默处理。 -
写入类型匹配:检查
writeType参数是否与BLE设备特征(characteristic)支持的写入类型(write或writeWithoutResponse)一致。若不匹配,iOS可能不会触发回调。建议通过uni.getBLECharacteristics获取特征属性,根据properties字段确定写入类型。 -
数据长度限制:iOS单次写入数据长度通常不超过20字节(MTU限制)。如果数据过长,需分包发送,并确保每次写入后等待回调(或适当延迟)再发送下一包。
-
异步处理问题:避免在回调触发前连续调用写入方法。建议使用Promise或async/await封装写入操作,确保串行执行。例如:
async function writeData(data) { try { const res = await new Promise((resolve, reject) => { uni.writeBLECharacteristicValue({ deviceId, serviceId, characteristicId, value: data, success: resolve, fail: reject }); }); console.log('写入成功', res); } catch (err) { console.error('写入失败', err); } }

