uni-app 蓝牙在设备多服务的情况下获取特征值失败10005
uni-app 蓝牙在设备多服务的情况下获取特征值失败10005
信息类别 | 详情 |
---|---|
产品分类 | uniapp/App |
PC开发环境操作系统 | Mac |
PC开发环境操作系统版本号 | 14.0 (23A344) |
HBuilderX类型 | 正式 |
HBuilderX版本号 | 3.98 |
手机系统 | iOS |
手机系统版本号 | iOS 16 |
手机厂商 | 苹果 |
手机机型 | iphone xr |
页面类型 | vue |
vue版本 | vue2 |
打包方式 | 云端 |
项目创建方式 | HBuilderX |
操作步骤:
如题
预期结果:
如题
实际结果:
如题
bug描述:
【报Bug】我的蓝牙设备有3个主服务,在已连接的情况下,拿着deviceId和主服务serviceId去拿特征值,3个服务里只有第一个服务能正常获取到特征值,其他2个服务就失败报错10005,我用微信官方写法,Taro,包括uniapp打包成小程序都是正常,唯独uniapp打包成app就无法获取
代码见附件
3 回复
这个绝对是bug,希望官方能重视,如果用button来触发获取特征值的函数,就可以拿到第二个服务的特征值!!!!
麻烦问一下,这个问题目前你解决了吗
在使用 uni-app 进行蓝牙开发时,如果在设备多服务的情况下获取特征值失败,错误码为 10005
,通常表示在蓝牙操作过程中出现了某种错误。以下是一些可能的原因和解决方法:
1. 蓝牙连接问题
- 原因: 设备可能没有正确连接,或者连接不稳定。
- 解决: 确保设备已成功连接,并且连接状态稳定。可以尝试重新连接设备。
2. 服务或特征值未找到
- 原因: 你可能尝试获取的特征值在设备服务中不存在,或者服务本身未被正确发现。
- 解决: 确保你正在访问正确的服务和特征值。可以通过
getBLEDeviceServices
和getBLEDeviceCharacteristics
方法分别获取设备的服务和特征值列表,确认你要访问的特征值是否存在。
3. 权限问题
- 原因: 应用可能没有获取蓝牙权限,或者权限被拒绝。
- 解决: 确保在
manifest.json
中正确配置了蓝牙权限,并且在运行时向用户请求了必要的权限。
{
"permissions": {
"bluetooth": {
"description": "用于蓝牙设备连接"
}
}
}
4. 蓝牙设备不支持
- 原因: 目标设备可能不支持你尝试访问的特定服务或特征值。
- 解决: 确认设备的蓝牙协议和服务支持情况,确保设备支持你需要的服务或特征值。
5. 异步操作问题
- 原因: 可能在获取特征值的操作还未完成时,尝试了其他操作,导致冲突。
- 解决: 确保在获取特征值的操作完成后,再进行其他操作。可以使用 Promise 或 async/await 来确保操作顺序。
6. 代码问题
- 原因: 代码中可能存在逻辑错误,导致获取特征值失败。
- 解决: 检查代码逻辑,确保在获取特征值之前,设备和服务的发现过程已经完成。以下是一个示例代码片段:
uni.getBLEDeviceServices({
deviceId: deviceId,
success: (res) => {
console.log('Services:', res.services);
uni.getBLEDeviceCharacteristics({
deviceId: deviceId,
serviceId: serviceId,
success: (res) => {
console.log('Characteristics:', res.characteristics);
// 在这里进行特征值操作
},
fail: (err) => {
console.error('Failed to get characteristics:', err);
}
});
},
fail: (err) => {
console.error('Failed to get services:', err);
}
});