7***@qq.com
7***@qq.com
  • 发布:2021-01-13 16:21
  • 更新:2022-01-26 11:26
  • 阅读:882

【报Bug】安卓平台获取不到蓝牙设备服务列表(ios可以)

分类:uni-app

产品分类: uniapp/App

PC开发环境操作系统: Windows

PC开发环境操作系统版本号: win10

HBuilderX类型: 正式

HBuilderX版本号: 3.0.7

手机系统: Android

手机系统版本号: Android 9.0

手机厂商: 华为

手机机型: MI8 Explorer Edition

页面类型: vue

nvue编译模式: fast

打包方式: 云端

项目创建方式: HBuilderX

示例代码:
//获取蓝牙设备所有服务(service)  
getBLEDeviceServices() {  
    let _serviceList = [];  
    let deviceId = this.deviceId;  
    let self = this;  
    return new Promise((resolve, reject) => {  
        setTimeout(() => {  
            uni.getBLEDeviceServices({  
                deviceId: self.deviceId,  
                success: function(res)  {  
                    console.log('获取蓝牙设备所有服务',res)  
                    /* "advertisServiceUUIDs":   
                        // let arr = [{  
                        uuid:'000018F0-0000-1000-8000-00805F9B34FB',  
                        isPrimary:true  
                    },{  
                        uuid:'E7810A71-73AE-499D-8C15-FAA9AEF0C3F2',  
                        isPrimary:true  
                    }] */  
                    if(res.services.length === 0){  
                        res.services = arr  
                    }  
                    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));、  
                    reject(err);  
                },  
            })  
        }, 1500);  
    });  
}

操作步骤:
  1. 连接低功耗蓝牙设备。返回值 ok
  2. 获取蓝牙设备所有服务(service), 返回值 services Array 为 空数组 (ios可正常拿到uuid等信息)

预期结果:

正确返回蓝牙设备所有服务 如:
[{uuid:'000018F0-0000-1000-8000-00805F9B34FB',isPrimary:true}]

实际结果:

[]

bug描述:

在连接蓝牙成功后, 获取蓝牙设备所有服务(service),安卓平台返回值为空,正常情况下应返回 [ {uuid:'abc',isPrimary;true } ]。
ios平台返回正常,打印流程正常。

接口: uni.getBLEDeviceServices(OBJECT)

打印机品牌: EPSON
型号: LQ-630K2
开发型号: PB11A

2021-01-13 16:21 负责人:DCloud_Android_zl 分享
已邀请:
7***@qq.com

7***@qq.com (作者)

顶一手

7***@qq.com

7***@qq.com (作者)

@DCloud_Android_DQQ @DCloud_UNI_linju_json @DCloud_UNI_LXH @DCloud_Android_DQQ

7***@qq.com

7***@qq.com (作者)

小程序和IOS都可以正常获取到蓝牙设备服务信息,唯独安卓不可以,也不报错,仅仅是没有获取到,打印机设备是同一个

7***@qq.com

7***@qq.com (作者)

获取服务失败打印信息

7***@qq.com

7***@qq.com (作者)

uni.createBLEConnection({  
                        deviceId:item.deviceId,  
                        success: (res) => {  
                                console.log(res)  
                                uni.showLoading({  
                                    mask: true,  
                                    title: '设备连接成功',  
                                    duration:2000  
                                })  
                                setTimeout(() => {  
                                    uni.getBLEDeviceServices({  
                                        deviceId: item.deviceId,  
                                        success: function(res)  {  
                                            console.log('获取蓝牙设备所有服务',res)  
                                        },  
                                        fail:err => {  
                                            console.log('获取服务失败',err)  
                                        }  
                                    })  
                                },1500)  
                        },  
                    })
7***@qq.com

7***@qq.com (作者)

更新了打印机品牌型号,有遇到类似情况的看看

machi的奶茶

machi的奶茶 - 披风前行

我也遇到了此问题,打印机型号为:QR-386A 。

解决的办法就是延长了API 的请求时间,从原先的500ms改为1500ms,就成功了。

代码如下:

return new Promise((resolve, reject) => {  
            setTimeout(() => {  
                uni.getBLEDeviceServices({  
                    deviceId,  
                    success: res => {  
                        console.log('设备的服务信息:', JSON.stringify(res));  
                        uni.hideLoading();  
                    },  
                    fail: err => {  
                    },  
                })  
            }, 1500);  
        });
火听第一帅

火听第一帅

您好,请问解决了吗

要回复问题请先登录注册