uni-app 【报Bug】uni.startBluetoothDevicesDiscovery services过滤无效

uni-app 【报Bug】uni.startBluetoothDevicesDiscovery services过滤无效

项目名称
产品分类 uniapp/App
PC开发环境 Windows
PC版本号 win10
HBuilderX 正式
HBuilderX版本 3.2.14
手机系统 Android
手机系统版本 Android 10
手机厂商 华为
手机机型 P20
页面类型 vue
vue版本 vue2
打包方式 云端
项目创建方式 HBuilderX

示例代码:

uni.startBluetoothDevicesDiscovery({  
    services:['0000FEFF-0000-1000-8000-00805F9B34FB'],   
    success: function(e) {  
        that.tipsMsg = '开始搜索蓝牙设备;'  
        // 发现外围设备  
        that.onBluetoothDeviceFound()  
    },  
    fail: function(err) {  
        console.log(err)  
        err.hasOwnProperty('errCode') && that.handleErrCode(err.errCode)  
    }  
});

操作步骤:

uni.startBluetoothDevicesDiscovery({  
    services:['0000FEFF-0000-1000-8000-00805F9B34FB'],   
    success: function(e) {  
        that.tipsMsg = '开始搜索蓝牙设备;'  
        // 发现外围设备  
        that.onBluetoothDeviceFound()  
    },  
    fail: function(err) {  
        console.log(err)  
        err.hasOwnProperty('errCode') && that.handleErrCode(err.errCode)  
    }  
});

预期结果:

只搜索 advertisServiceUUIDs 为0000FEFF-0000-1000-8000-00805F9B34FB频段的蓝牙设备

实际结果:

还是搜索了所有的蓝牙设备,没有过滤

bug描述:

uni.startBluetoothDevicesDiscovery services过滤无效,还是搜索了全部蓝牙设备


更多关于uni-app 【报Bug】uni.startBluetoothDevicesDiscovery services过滤无效的实战教程也可以访问 https://www.itying.com/category-93-b0.html

18 回复

问题已经确定,麻烦提供一下联系方式协助验证一下。

更多关于uni-app 【报Bug】uni.startBluetoothDevicesDiscovery services过滤无效的实战教程也可以访问 https://www.itying.com/category-93-b0.html


你好,请问修复了码

还没修复好吗?我这也出了这个BUG

修复了没?

煞笔官方

这都多久了

问题修复了吗

我也遇到了这个问题,请问修复了吗?如何处理?

3.6.14版本还有这个问题

这个问题解决了没

这个问题我也碰到,还没有解决哦

这个问题我也碰到,还没有解决哦

今天刚试了,还是没有解决呀.

我添加过滤没有任何返回

我也遇到了

2024年了,还没解决

25年了还是没有解决,加了services属性就什么都搜不出来了

根据你提供的信息,uni.startBluetoothDevicesDiscoveryservices 参数在 Android 设备上过滤无效,这确实是 uni-app 蓝牙模块的一个已知问题。

在 Android 平台上,services 参数的实际行为依赖于底层系统蓝牙 API 的实现。Android 的 BluetoothAdapter.startLeScan() 方法虽然支持 UUID 过滤,但很多设备厂商的系统层对此支持并不完善,导致过滤条件可能被忽略。尤其是在 Android 10 及以上版本,系统对蓝牙权限和扫描行为有更严格的限制,这可能进一步影响过滤效果。

目前 uni-app 的蓝牙 API 是对微信小程序 API 的封装,其行为在不同平台上可能存在差异。在 iOS 上,services 过滤通常有效;而在 Android 上,则可能出现过滤失效的情况。

建议的临时解决方案:

  1. onBluetoothDeviceFound 回调中手动过滤:这是目前最可靠的方案。你可以在发现设备后,检查设备的 advertisServiceUUIDs 是否包含目标 UUID,再进行后续处理。

    uni.onBluetoothDeviceFound((devices) => {
        devices.forEach(device => {
            // 检查设备广播的服务 UUID 是否包含目标 UUID
            if (device.advertisServiceUUIDs && 
                device.advertisServiceUUIDs.includes('0000FEFF-0000-1000-8000-00805F9B34FB')) {
                // 处理目标设备
                console.log('找到目标设备:', device);
            }
        });
    });
回到顶部