uni-app中uni.writeBLECharacteristicValue在APP环境中一直提示10013错误,在微信小程序中正常

发布于 1周前 作者 caililin 来自 Uni-App

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 错误。如果问题依旧存在,可能需要进一步检查设备的蓝牙固件或联系设备制造商获取支持。

回到顶部