uni-app writeBLECharacteristicValue报10007错误,两个项目相同代码一个报错一个成功
uni-app writeBLECharacteristicValue报10007错误,两个项目相同代码一个报错一个成功
| 开发环境 | 版本号 | 项目创建方式 |
|---|---|---|
| Windows | 26100.3775 | HBuilderX |
## 示例代码:
```javascript
console.log('sendOrder::', deviceId, serviceId, writeId);
uni.writeBLECharacteristicValue({
deviceId,
serviceId,
value: order,
characteristicId: writeId,
writeType: 'write',
success(res) {
console.log('sendOrder success::', res);
},
fail(error) {
console.log('sendOrder error::', error);
}
})
操作步骤:
不同项目,同代码蓝牙写入操作
预期结果:
成功
实际结果:
失败
bug描述:
问题描述:A、B两个项目,A项目蓝牙数据写入成功,B项目蓝牙数据写入报10007错误(fail property not support)

运行环境:A、B两个项目调试使用的手机、蓝牙连接的设备、蓝牙流程代码、获取到的服务、获取到的特征值、发送的数据内容全部相同
A项目运行结果:

B项目运行结果:

更多关于uni-app writeBLECharacteristicValue报10007错误,两个项目相同代码一个报错一个成功的实战教程也可以访问 https://www.itying.com/category-93-b0.html
蓝牙连接成功后不能立刻发送指令,需要延迟1-2s
更多关于uni-app writeBLECharacteristicValue报10007错误,两个项目相同代码一个报错一个成功的实战教程也可以访问 https://www.itying.com/category-93-b0.html
这个问题我也发现了,连接成功后不能立即发送指令,最少得等两秒,不知道什么毛病
这是一个典型的蓝牙特征值属性不匹配问题。错误代码10007表示fail property not support,即当前特征值不支持写入操作。
虽然你提到两个项目的设备、服务和特征值都相同,但实际可能存在以下差异:
-
特征值属性验证:在调用
writeBLECharacteristicValue前,建议先通过getBLEDeviceCharacteristics确认特征值的properties属性是否包含write权限。即使特征值ID相同,其属性可能因设备状态不同而变化。 -
数据格式问题:确保
order参数是ArrayBuffer格式。如果是字符串,需要使用:const encoder = new TextEncoder(); const order = encoder.encode(yourString).buffer; -
时序问题:蓝牙操作需要严格遵循初始化顺序。确保在
notifyBLECharacteristicValueChange成功后再执行写入操作,避免特征值状态未就绪。 -
项目配置差异:检查两个项目的manifest.json中蓝牙权限配置是否一致,以及基础库版本是否存在差异。
建议在B项目中添加特征值属性检查:
uni.getBLEDeviceCharacteristics({
deviceId,
serviceId,
success: (res) => {
const characteristic = res.characteristics.find(c => c.uuid === writeId);
console.log('Characteristic properties:', characteristic.properties);
}
});

