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
问题已经确定,麻烦提供一下联系方式协助验证一下。
更多关于uni-app 【报Bug】uni.startBluetoothDevicesDiscovery services过滤无效的实战教程也可以访问 https://www.itying.com/category-93-b0.html
你好,请问修复了码
还没修复好吗?我这也出了这个BUG
修复了没?
煞笔官方
问题修复了吗
我也遇到了这个问题,请问修复了吗?如何处理?
3.6.14版本还有这个问题
这个问题解决了没
这个问题我也碰到,还没有解决哦
这个问题我也碰到,还没有解决哦
今天刚试了,还是没有解决呀.
我添加过滤没有任何返回
我也遇到了
2024年了,还没解决
25年了还是没有解决,加了services属性就什么都搜不出来了
根据你提供的信息,uni.startBluetoothDevicesDiscovery 的 services 参数在 Android 设备上过滤无效,这确实是 uni-app 蓝牙模块的一个已知问题。
在 Android 平台上,services 参数的实际行为依赖于底层系统蓝牙 API 的实现。Android 的 BluetoothAdapter.startLeScan() 方法虽然支持 UUID 过滤,但很多设备厂商的系统层对此支持并不完善,导致过滤条件可能被忽略。尤其是在 Android 10 及以上版本,系统对蓝牙权限和扫描行为有更严格的限制,这可能进一步影响过滤效果。
目前 uni-app 的蓝牙 API 是对微信小程序 API 的封装,其行为在不同平台上可能存在差异。在 iOS 上,services 过滤通常有效;而在 Android 上,则可能出现过滤失效的情况。
建议的临时解决方案:
-
在
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); } }); });


