低功耗蓝牙安卓发送请求一直报错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('特征值不支持写入');
    }
  }
});
回到顶部