AltBean/Android 如何管理主动和被动 BLE 扫描?是否可以将库设置为仅执行被动扫描?

How AltBean/Android manages active and passive BLE scan? Is it possible to set the library to perform only passive scans?

如果我正确理解了 AltBeacon 的 Power Manager 文档。在 Android 5+ 设备上,库将连续(或每隔几秒)执行被动扫描,并且不时地执行主动扫描。主动扫描时间由 setBackgroundScanPeriodsetBackgroundBetweenScanPeriod BeaconManager 的方法控制。

就我而言,我们正在使用的信标以恒定速率进行广告,并且不会发送有关主动扫描的附加信息 (SCAN_REQ)。

考虑到功耗,我想知道是否有一种方法可以使用库来禁用主动扫描,我。 e.一旦我的 Android 设备靠近该信标,仅执行被动扫描并获取我的信标发送的所有(或尽可能多的)广告数据包。总之,我们希望尽快检测到信标的存在,一旦检测到,只使用被动扫描注册所有广告数据包。

这可能吗?如果是这样,我如何使用该库来获得此行为?

两点:

  1. 当库文档提到主动与被动扫描时,它并不是在谈论发送 SCAN_REQ。 "passive" 扫描仅意味着低功耗 Android 扫描,使用硬件数据包过滤器将扫描卸载到蓝牙芯片。如果芯片发现匹配模式的数据包,它会唤醒 OS。不过,就您的问题而言,图书馆进行的所有扫描都是被动的。

  2. 撇开术语差异不谈,如果您只想进行上述过滤的低功率扫描,您只需将后台扫描周期设置为 0。这可能适用于 Android 8 + 设备。在 Android 5-7 上,它可能无法正常工作,因为过滤扫描用于解析实际数据包。