android - Android 9 上的过滤扫描不会使用 UUID 过滤器找到信标

标签 android bluetooth-lowenergy ibeacon altbeacon

我目前正在尝试扫描 BLE 设备,我使用的是装有 Android 9.0 的 Galaxy S9+。 似乎未过滤的扫描不适用于 galaxy s9+,所以我添加了这样的过滤器

String serviceUuidString = "51525354-5556-5758-5950-abbccddeeff0"; //uuid i wanna scan
String serviceUuidMaskString = "FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF";
ParcelUuid parcelUuid = ParcelUuid.fromString(serviceUuidString); 
ParcelUuid parcelUuidMask = ParcelUuid.fromString(serviceUuidMaskString);

ScanFilter filter1 = new ScanFilter.Builder().setServiceUuid(parcelUuid, parcelUuidMask).build();
filters.add(filter1);

这没有用,但我一添加就

ScanFilter filter = new ScanFilter.Builder().setDeviceAddress("D8:09:1A:58:41:39").build();
filters.add(filter);

它在手机锁定后开始检测信标。不过,我认为添加每台 Mac 并不是一个好方法。为 uuid 添加过滤器时是否做错了什么?

这就是我build设置的方式

settings = scanSettingsBuilder.build();

最佳答案

仔细检查以确保过滤器中的服务 UUID 正确无误。当检测到服务广告数据包(没有过滤器)时,从操作系统打印出 LogCat 行并将其张贴在这里可能会有所帮助。

值得一提的是,Android Beacon 库中存在非常相似的代码,可以使用以下代码在后台扫描 Eddystone 服务 UUID,我已经验证它可以在 Galaxy S9 上运行(尽管还不适用于 Android 9.0)。以下代码与您所拥有的代码的主要区别在于它将 16 位 UUID 格式化为 128 位 UUID。但我认为这不太可能产生影响。

            ScanFilter.Builder builder = new ScanFilter.Builder();
            String serviceUuidString = String.format("0000%04X-0000-1000-8000-00805f9b34fb", sfd.serviceUuid);
            String serviceUuidMaskString = "FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF";
            ParcelUuid parcelUuid = ParcelUuid.fromString(serviceUuidString);
            ParcelUuid parcelUuidMask = ParcelUuid.fromString(serviceUuidMaskString);
            builder.setServiceUuid(parcelUuid, parcelUuidMask);
            ScanFilter scanFilter = builder.build();
            scanFilters.add(scanFilter);

关于android - Android 9 上的过滤扫描不会使用 UUID 过滤器找到信标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54615051/

相关文章:

java - 空列表 : ArrayAdapter in Fragment

java - 实时游戏开发

android - 蓝牙网关 : negotiating new MTU succeeds but new size cannot be used (3 bytes difference)

iphone - iOS 核心蓝牙/iBeacon : Advertise an iBeacon and a peripheral service concurrently

ios - 一旦执行停止 performseguewithidentifier

swift - BLE 在蓝牙设备附近执行功能

android - 如何使用 Android TagHandler 读取自定义 html 标签属性

Android: ScrollView拦截 map API V2 touch

ios - iOS 中的 Core Bluetooth LE 和 Classical

java - Android BLE 写入特性锁定 onCharacteristicWrite/onCharacteristicChange