uni-app中uni.writeBLECharacteristicValue在APP环境中一直提示10013错误,在微信小程序中正常
uni-app中uni.writeBLECharacteristicValue在APP环境中一直提示10013错误,在微信小程序中正常
项目信息 | 详情 |
---|---|
产品分类 | uniapp/App |
PC开发环境 | Windows |
PC开发环境版本 | win10 |
HBuilderX类型 | 正式 |
HBuilderX版本 | 4.24 |
手机系统 | Android |
手机系统版本 | Android 15 |
手机厂商 | 华为 |
手机机型 | 华为nove |
页面类型 | vue |
vue版本 | vue3 |
打包方式 | 云端 |
项目创建方式 | HBuilderX |
示例代码:
let closekey = 53da3c5908296b48abfb64bee4bb94ee
const characteristicId =00009004-0000-1000-8000-00805F9B34FB
const buffer = new ArrayBuffer(closekey)
console.log('命令值',buffer);
console.log('deviceId',this.deviceId);
console.log('serviceId', this.serviceId)
uni.writeBLECharacteristicValue({
deviceId:this.deviceId,
serviceId: this.serviceId,
characteristicId,
value: buffer,
success: async (res) => {
console.log('写入指令发送成功', res)
},
fail: (e) => {
console.log('writeBLECharacteristicValue,错误码:'+ JSON.stringify(e));
console.log('当前deviceId', this.deviceId)
console.log('当前serviceid', this.serviceId)
console.log('当前characteristicId', characteristicId)
}
})
操作步骤:
连接设备蓝牙后发送该写入命令
预期结果:
console.log('写入指令发送成功', res)
实际结果:
{"errMsg":"writeBLECharacteristicValue:fail invalid data,please check parameters","code":10013}
当前deviceId, 84:C2:E4:03:15:29 at pages/home/index.vue:1841
14:26:24.022 当前serviceid, 00009000-0000-1000-8000-00805F9B34FB at pages/home/index.vue:1842
14:26:24.022 当前characteristicId, 00009004-0000-1000-8000-00805F9B34FB at pages/home/index.vue:1843
bug描述:
{"errMsg":"writeBLECharacteristicValue:fail invalid data,please check parameters","code":10013}
uni.writeBLECharacteristicValue在APP环境中一直提示10013,在微信小程序中正常,我在错误信息中打印出了deviceId和所需的参数都有,请问这是什么问题
2 回复
有没有大佬解答一下呀,是deviceId格式不对吗
在处理 uni-app
中使用 uni.writeBLECharacteristicValue
方法时遇到 10013 错误代码,这通常表明在 APP 环境中蓝牙操作遇到了问题。10013 错误通常与设备服务或特征值写入权限有关,或者设备可能不支持该操作。虽然微信小程序中表现正常,但 APP 环境(如 iOS 或 Android)可能对蓝牙权限管理更为严格。
以下是一些可能的解决步骤和代码示例,帮助你排查和解决这个问题:
1. 确保设备服务和特征值正确
首先,确保你正在尝试写入的服务和特征值 ID 是正确的,并且设备确实支持这些操作。
// 示例:获取服务和特征值
uni.getBLEDeviceServices({
deviceId: deviceId,
success: function (res) {
const serviceId = res.services[0].uuid; // 假设使用第一个服务
uni.getBLEDeviceCharacteristics({
deviceId: deviceId,
serviceId: serviceId,
success: function (charRes) {
const characteristicId = charRes.characteristics[0].uuid; // 假设使用第一个特征值
// 接下来尝试写入
}
});
}
});
2. 检查写入权限
确保你的应用已经请求并获得了必要的蓝牙权限,并且特征值支持写入操作。
// 示例:写入特征值
uni.writeBLECharacteristicValue({
deviceId: deviceId,
serviceId: serviceId,
characteristicId: characteristicId,
value: arrayBuffer, // 要写入的数据,必须是 ArrayBuffer 类型
success: function (res) {
console.log('写入成功');
},
fail: function (err) {
if (err.errCode === 10013) {
console.error('错误 10013: 写入权限问题或设备不支持');
} else {
console.error('写入失败', err);
}
}
});
3. 处理可能的权限问题
在 APP 端(特别是 Android),确保在 AndroidManifest.xml
中添加了必要的蓝牙权限。
<uses-permission android:name="android.permission.BLUETOOTH"/>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> <!-- 对于 Android 6.0 及以上版本,扫描蓝牙设备需要位置权限 -->
并且在运行时请求位置权限(如果适用)。
4. 调试和日志
增加更多的日志输出,以帮助定位问题发生的具体环节。检查设备是否连接成功,服务和特征值是否获取正确,以及写入操作是否执行到了预期的点。
通过上述步骤和代码示例,你应该能够更准确地定位和解决 uni.writeBLECharacteristicValue
在 APP 环境中遇到的 10013 错误。如果问题依旧存在,可能需要进一步检查设备的蓝牙固件或联系设备制造商获取支持。