q***@yeah.net
q***@yeah.net
  • 发布:2025-08-15 11:47
  • 更新:2025-10-15 17:22
  • 阅读:97

【报Bug】使用uni.startBluetoothDevicesDiscovery时,若services参数传入的Array长度大于1,将产生没有搜索到任何设备的现象

分类:uni-app

产品分类: uniapp/App

PC开发环境操作系统: Windows

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

HBuilderX类型: 正式

HBuilderX版本号: 4.75

手机系统: Android

手机系统版本号: Android 15

手机厂商: 一加

手机机型: 一加12

页面类型: vue

vue版本: vue3

打包方式: 云端

项目创建方式: HBuilderX

示例代码:
// services参数传入数组长度为1时,结果正常  
uni.startBluetoothDevicesDiscovery({  
    services: [  
        "0000FFF0-0000-1000-8000-00805F9B34FB"  
    ],  
    success(res) {  
        uni.onBluetoothDeviceFound(res => {  
                // 可以获取到所过滤到的设备列表  
        })  
    }  
})  

// services参数传入数组长度大于1时,无法搜索到任何设备  
uni.startBluetoothDevicesDiscovery({  
    services: [  
        "0000FFF0-0000-1000-8000-00805F9B34FB",  
        "0000ae00-0000-1000-8000-00805f9b34fb",  
    ],  
    success(res) {  
        uni.onBluetoothDeviceFound(res => {  
                // 无法获取到设备列表(onBluetoothDeviceFound未触发)  
        })  
    }  
})

操作步骤:
// services参数传入数组长度大于1时,无法搜索到任何设备  
uni.startBluetoothDevicesDiscovery({  
    services: [  
        "0000FFF0-0000-1000-8000-00805F9B34FB",  
        "0000ae00-0000-1000-8000-00805f9b34fb",  
    ],  
    success(res) {  
        uni.onBluetoothDeviceFound(res => {  
                // 无法获取到设备列表(onBluetoothDeviceFound未触发)  
        })  
    }  
})

预期结果:

当uni.startBluetoothDevicesDiscovery的参数services传入的Array长度大于1时(即传入多个主sevice时),最终onBluetoothDeviceFound应触发并返回满足“符合任一主service”的蓝牙设备列表。

实际结果:

当uni.startBluetoothDevicesDiscovery的参数services传入的Array长度大于1时(即传入多个主sevice时),无法搜索到任何设备(抑或可能是所有设备都被过滤掉了)

bug描述:

在使用uni.startBluetoothDevicesDiscovery方法时,services参数传入的Array长度若大于1,会导致最终无法搜索到任何设备,只有传入的Array长度等于1时才能正常搜索并过滤到设备。

2025-08-15 11:47 负责人:无 分享
已邀请:
1***@qq.com

1***@qq.com

我试了下,安卓调用2次uni.startBluetoothDevicesDiscovery,分别传入不同的service是生效的,苹果调用2次,只有第1次生效。

1***@qq.com

1***@qq.com

解决办法,前提是设备的广播中要有advertisServiceUUIDs,

uni.onBluetoothDeviceFound(res => {
//把搜索到的设备进行一次筛选
let arr = [];
let serviceDic = ["0000FFF0-0000-1000-8000-00805F9B34FB",
"0000ae00-0000-1000-8000-00805f9b34fb"];

for (var i = 0; i < res.devices.length; i++) {  
    let item = res.devices[i];  
    let f = serviceDic.find(v => {  
        return item.advertisServiceUUIDs.includes(v.serviceId);  
    });  
    if (f) {  
        arr.push(item);  
    }  

}  
if (arr.length === 0) {  
    return;  
}  
//对devices参数进行重新赋值  
res.devices = arr;  

//继续执行回调函数其它内容  

})

要回复问题请先登录注册