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

3 回复

蓝牙连接成功后不能立刻发送指令,需要延迟1-2s

更多关于uni-app writeBLECharacteristicValue报10007错误,两个项目相同代码一个报错一个成功的实战教程也可以访问 https://www.itying.com/category-93-b0.html


这个问题我也发现了,连接成功后不能立即发送指令,最少得等两秒,不知道什么毛病

这是一个典型的蓝牙特征值属性不匹配问题。错误代码10007表示fail property not support,即当前特征值不支持写入操作。

虽然你提到两个项目的设备、服务和特征值都相同,但实际可能存在以下差异:

  1. 特征值属性验证:在调用writeBLECharacteristicValue前,建议先通过getBLEDeviceCharacteristics确认特征值的properties属性是否包含write权限。即使特征值ID相同,其属性可能因设备状态不同而变化。

  2. 数据格式问题:确保order参数是ArrayBuffer格式。如果是字符串,需要使用:

    const encoder = new TextEncoder();
    const order = encoder.encode(yourString).buffer;
    
  3. 时序问题:蓝牙操作需要严格遵循初始化顺序。确保在notifyBLECharacteristicValueChange成功后再执行写入操作,避免特征值状态未就绪。

  4. 项目配置差异:检查两个项目的manifest.json中蓝牙权限配置是否一致,以及基础库版本是否存在差异。

建议在B项目中添加特征值属性检查:

uni.getBLEDeviceCharacteristics({
  deviceId,
  serviceId,
  success: (res) => {
    const characteristic = res.characteristics.find(c => c.uuid === writeId);
    console.log('Characteristic properties:', characteristic.properties);
  }
});
回到顶部