Android 9上的筛选扫描不会使用UUID筛选器找到信标

时间:2019-02-10 09:26:46

标签: android bluetooth-lowenergy ibeacon altbeacon

我目前正在尝试扫描BLE设备,我正在将Galaxy S9 +与android 9.0配合使用。 似乎未经过滤的扫描不适用于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();

1 个答案:

答案 0 :(得分:1)

仔细检查以确保您在过滤器中具有正确的服务UUID。当检测到服务广告包(不带过滤器)时,从操作系统中打印LogCat行并将其张贴在此处可能会有所帮助。

就其价值而言,Android Beacon库中存在非常相似的代码,可使用以下代码在后台扫描Eddystone Service UUID,并且我已经验证了它可在Galaxy S9上运行(尽管尚不支持Android 9.0)。以下代码与现有代码的主要区别在于,它将16位UUID格式化为128位UUID。但是我认为这不太可能有所作为。

o := bufio.NewReader(&out)

outputfile, err := os.Create("test.bmp")
if err != nil {
    log.Fatal(err)
}
defer outputfile.Close()
io.Copy(outputfile, o)