低功耗蓝牙安卓发送请求一直报错10007,ios一切正常
低功耗蓝牙安卓发送请求一直报错10007,ios一切正常
| 开发环境 | 版本号 | 项目创建方式 |
|---|---|---|
| Windows | - | HBuilderX |
示例代码:
// 写入数据 const sendmmm = async (requestStr) => { isSending.value = true
const buffer = string2buffer(requestStr)
let pos = 0
let bytes = buffer.byteLength
uni.setStorageSync(
'blueTooth',
JSON.stringify({
deviceId: deviceId.value,
serviceId: serviceId.value,
characteristicId: writeId.value || characteristicId.value
})
)
const sendSegment = async (segmentSize = 20, delay = 50) => {
while (bytes > 0) {
const tmp = buffer.slice(pos, pos + segmentSize)
await new Promise((resolve, reject) => {
uni.writeBLECharacteristicValue({
deviceId: deviceId.value,
serviceId: serviceId.value,
writeType: 'write',
characteristicId: writeId.value || characteristicId.value,
value: tmp,
success:resolve,
fail: reject
})
})
pos += segmentSize
bytes -= segmentSize
if (bytes > 0) await new Promise(resolve => setTimeout(resolve, delay))
}
}
try {
// setTimeout(()=>{
await sendSegment()
console.log('✅ 数据发送完成')
// },2000)
} catch (err) {
console.error('❌ 数据发送失败', err)
}
isSending.value = false
}
### 操作步骤:
// 写入数据
const sendmmm = async (requestStr) => {
isSending.value = true
const buffer = string2buffer(requestStr)
let pos = 0
let bytes = buffer.byteLength
uni.setStorageSync(
'blueTooth',
JSON.stringify({
deviceId: deviceId.value,
serviceId: serviceId.value,
characteristicId: writeId.value || characteristicId.value
})
)
const sendSegment = async (segmentSize = 20, delay = 50) => {
while (bytes > 0) {
const tmp = buffer.slice(pos, pos + segmentSize)
await new Promise((resolve, reject) => {
uni.writeBLECharacteristicValue({
deviceId: deviceId.value,
serviceId: serviceId.value,
writeType: 'write',
characteristicId: writeId.value || characteristicId.value,
value: tmp,
success:resolve,
fail: reject
})
})
pos += segmentSize
bytes -= segmentSize
if (bytes > 0) await new Promise(resolve => setTimeout(resolve, delay))
}
}
try {
// setTimeout(()=>{
await sendSegment()
console.log('✅ 数据发送完成')
// },2000)
} catch (err) {
console.error('❌ 数据发送失败', err)
}
isSending.value = false
}
预期结果:
不报错发送成功
### 实际结果:
报错10007
bug描述:
发数据写入,一直报错失败
{ “errMsg”: “writeBLECharacteristicValue:fail property not support”, “code”: 10007 }
1 回复
这个错误码10007表示蓝牙特征值不支持写入操作。在Android和iOS上对蓝牙特性的权限处理存在差异,导致同一特性在iOS能写而在Android上报错。
检查特征值的properties属性,确认其是否包含write或writeWithoutResponse权限。在连接设备后,通过uni.getBLEDeviceCharacteristics获取设备特征值列表,检查目标characteristic的properties属性。
建议在写入前添加特性验证:
// 获取特征值属性
uni.getBLEDeviceCharacteristics({
deviceId: deviceId.value,
serviceId: serviceId.value,
success: (res) => {
const targetChar = res.characteristics.find(c =>
c.uuid === (writeId.value || characteristicId.value)
);
if (targetChar.properties.write || targetChar.properties.writeWithoutResponse) {
// 执行写入操作
} else {
console.error('特征值不支持写入');
}
}
});

