设备蓝牙连接成功, 获取不到设备蓝牙服务列表?
这种情况一般会接收到uniapp的错误码(10004), 我们可以前往uniapp官网API模块查看错误码信息,查看后可以得知错误码10004是没有找到指定服务.
我们可以详细看下获取所有服务的api -----uni.getBLEDeviceServices(OBJECT)
示例代码:
uni.getBLEDeviceServices({
// 这里的 deviceId 需要已经通过 createBLEConnection 与对应设备建立链接
deviceId,
success(res) {
console.log('device services:', res.services)
}
})
这句话很重要(需要确认一下是否已经建立连接):
这里的 deviceId 需要已经通过 createBLEConnection 与对应设备建立链接
下面说出现10004错误码的原因:
- 连接的蓝牙设备是否正确, deviceId 是否正确
- 使用uni.getBLEDeviceServices(OBJECT)方法的时候,需要加上一个延时器,根据情况自己设定延时时间, 我这边设置的2000毫秒,差不多就是100%能够获取到了.
正确代码样例:
重要的事情说三遍:
记得加延时器!!! 记得加延时器!!! 记得加延时器!!!
//获取蓝牙设备所有服务(service)
getBLEDeviceServices() {
let _serviceList = [];
let deviceId = uni.getStorageSync("deviceId");
let self = this;
return new Promise((resolve, reject) => {
setTimeout(() => {
uni.getBLEDeviceServices({
deviceId: deviceId,
success: res => {
console.log('################################# deviceId:'+ deviceId +' #########################################')
console.log('########################### 获取到蓝牙设备所有服务: '+ JSON.stringify(res)+' ####################')
for (let service of res.services) {
if (service.isPrimary) {
_serviceList.push(service);
}
}
uni.hideLoading();
// console.log("_serviceList: " + JSON.stringify(_serviceList));
resolve(_serviceList)
},
fail: err => {
uni.hideLoading();
self.showToast(`获取设备Services` + JSON.stringify(err));
console.log('################################# deviceId:'+ deviceId +' #########################################')
console.log('####################################### 获取蓝牙设备服务失败: '+ JSON.stringify(err) +' ###################################')
reject(err);
},
})
}, 2000);
});
}