安卓 9 上的过滤扫描不会找到使用 UUID 过滤器的信标.



我目前正在尝试扫描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 添加过滤器时是否有问题?

这就是我构建设置的方式

settings = scanSettingsBuilder.build();

仔细检查以绝对确定过滤器中的服务 UUID 正确无误。 当检测到服务通告数据包(不带过滤器(时,从操作系统打印出 LogCat 行并将其发布在此处可能会有所帮助。

值得一提的是,Android Beacon 库中存在非常相似的代码,可以使用以下代码在后台扫描 Eddystone Service 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);

最新更新