当前位置: 首页 > 知识库问答 >
问题:

带过滤器的Android BLE设备扫描不工作

慕容嘉荣
2023-03-14

我正在使用android BLE(蓝牙低能耗)。我在使用StartEScan(UUID[]ServiceUUID,BluetoothAdapter.LeScanCallback回调)方法扫描BLE设备时遇到问题,而StartEScan(BluetoothAdapter.LeScanCallback回调)工作正常<当我使用过滤器扫描特定的ServiceUUID时,回调没有执行。我正在测试三星galaxy s6<我想知道这个问题是特定于设备还是扫描功能有一些缺陷。

共有3个答案

杭镜
2023-03-14

BLE过滤扫描的问题是一个已知的问题。有关此问题和其他BLE问题,请参阅https://github.com/iDevicesInc/SweetBlue/wiki/Android-BLE-Issues。结论很简单:“您必须扫描所有设备并自己进行过滤。”

钦良弼
2023-03-14

这是我在三星Galaxy S6上发现的一个特定问题。我使用较新的扫描仪API,仅支持Android 5.0上的设备。我的测试显示S4、(尚未测试S5)、S7和S8都可以工作;我不知道为什么S6有问题。

遗憾的是,解决方法是在找到设备后手动过滤mac地址。

更新

这解决了我在Galaxy S6上遇到的问题。

之前,我向相同的扫描过滤器添加了两个条件,如下所示(Kotlin):

ScanFilter.Builder()
    .setServiceUuid(BluetoothBlind.Service.ParcelUUID)
    .setDeviceAddress(macAddress)
    .build()

将其更改为将条件拆分为多个过滤器可以修复此问题:

ScanFilter.Builder()
    .setDeviceAddress(macAddress)
    .build()

ScanFilter.Builder()
    .setServiceUuid(BluetoothBlind.Service.ParcelUUID)
    .build()
邵展
2023-03-14

我很确定这不是特定于设备的。首先,正如IshArt提到的,你应该在Android 5.0上使用startScan。

startScan(List<ScanFilter> filters, ScanSettings settings, ScanCallback callback)

根据我的经验,如果你选择MAC地址,扫描过滤器的实现工作正常,但其他过滤器设置参数有问题:

ScanFilter filter = new ScanFilter.Builder().setDeviceAddress(deviceMacAddress).build();
filters.add(filter);

如果这不是您的选择,您也可以实现自己的过滤器。如果将startScan()的过滤器列表留空,它将忽略所有过滤并接收所有内容。然后在回调中,您可以编写自己的方法来检查结果是否满足您的要求。

 类似资料:
  • 我正在Android(移动设备a)上执行UUID过滤扫描,我有两个测试用例。 一个人在另一个Android设备(移动设备b)上使用一个名为BLE扫描仪的应用程序来创建一个具有两个测试服务的BLE服务器(每个服务都有自己唯一的UUID)。另一种是通过Arduino BLE服务器,为其服务定制UUID。 如果我使用移动设备B的BLE扫描仪应用程序并扫描arduino,我可以找到它,连接到它并查看服务以

  • 我试图扫描BLE设备与 (我知道它在新版本中已经过时了,但我只是想看看它是否能与我的手机配合使用[4.4],我正在使用它)。因此,它开始扫描,然后继续,没有给出错误,但没有检测到设备。也会触发OnLEScan事件,但其中的设备参数为null。我的LE设备就在那里并已连接。 在Google上,我发现如果BluetoothAdapter没有UUID,就会发生这种情况。如何设置UUID?何时调用/启动O

  • 我想在我的Android应用程序中被动地扫描BLE广告商, 但我找不到如何做到这一点。 > < li> 根据蓝牙4.0核心规范,存在被动扫描模式。< br >第6卷:核心系统包[低能耗控制器卷],< br > D部分:4.1被动扫描< br > https://www.bluetooth.org/DocMan/handlers/DownloadDoc.ashx?doc_id=282159 “设备可

  • 我必须构建一个Android应用程序,用于读取一种设备上的信息,该设备仅在过滤时在扫描时显示(一般扫描不会显示它)。该设备类似于信标,因此它仅通告数据,这些数据在通告上具有我想要的信息(它不可连接)。制造商给我的过滤器是原始数据。即: 0x02010612435542 我不能按名称过滤它,因为设备不会宣传它的名称。我也不能通过来完成,因为应用程序以前不会知道设备的地址(这将是许多此类设备)。 nr

  • 开启蓝牙扫描 参数说明 字段 类型 必须? 说明 blePrefix String 是 设备名称类型前缀 示例代码 Swift: RokidMobileSDK.binder.startBLEScan(blePrefix: String) ->Bool Objc: [RokidMobileSDK.binder startBLEScanWithBlePrefix:@"Rokid-"]; 手机蓝牙未打

  • 扫描设备 介绍 需要传入扫描蓝牙设备的名称的前缀,回调均在主线程。如果传空,是无法获取设备列表。 1、单前缀蓝牙设备 参数说明 字段 类型 必须? 说明 type String 是 设备名称类型前缀 举个大栗子 String type = "Rokid-" RokidMobileSDK.binder.startBTScan(type, new IBTScanCallBack() { @Ov