低功率AltBeacon扫描澄清



我的目标是了解AltBeacon的行为,并获得有关功耗和信标检测的最高效应用程序。目前我正在分析图书馆,我需要一些澄清。

环境:

  • 使用自定义信标,不具有功率依赖性(在信标硬件上),传输速率(adv)大于1/s
  • 使用android信标库参考与灯光修改,以匹配自定义信标
  • 使用Android 10操作系统
  • 所有测试均仅使用backgroundMode

以下是我的问题:

  1. 在初始化时(使用RegionBootstrap),我们从两点到达ScanJobScheduler

    • BeaconManager:startMonitoringBeaconsInRegion:安排立即在50 millis中运行的ScanJob
    • BeaconManager:setBackgroundMode:取消先前计划的立即扫描作业(因为我们处于后台模式),并计划周期性的扫描作业

      立即扫描作业被取消的原因是因为第二次呼叫的时间不到50毫秒吗?为什么周期性的ScanJob被安排两次

  2. 在我终止应用程序后,大约需要10分钟才能重新启动,再过15分钟才能启动第一次扫描。

    我们可以在应用程序启动后立即进行一次"定期扫描作业",而不必再等待15分钟才能启动第一次计划的定期扫描作业吗

  3. 低功耗硬件滤波器仅在完成一次扫描作业后工作

    • 我看到硬件过滤器是在ScanJob生命周期完成后安装的(createScanFiltersForBeaconParsers)
    • 在应用程序被终止的情况下,这意味着过滤器将在第一次定期扫描作业完成(25分钟)后安装

      我们可以在初始化后立即安装低功耗硬件滤波器,而不等待第一次扫描作业完成吗

  4. 如果我将自定义信标上的ADV TX功率修改为更低,距离计算器还能正常工作吗

  5. 只使用背景模式有意义吗?还是应该切换到前景?这能达到我的目标吗?

    • 在前台启动服务
    • 安装硬件过滤器(如果第3点不是选项,请在前台立即扫描以触发它)
    • 在后台扫描,直到硬件过滤器传递意图
    • 检测到第一个信标后开始在前景中扫描
    • 在前台扫描,直到我们离开该区域,以便再次安装硬件过滤器(startPassiveScanIfNeeded)
    • 切换到后台扫描并等待下一次唤醒
  6. 当信标不在范围内时,是否有任何可能的方式从BluetoothLEScanner接收意向?

谢谢,Vlad

几个答案:

  1. 启动即时扫描作业的50秒延迟是为了防止同时启动两个即时扫描作业时出现竞争条件。当您将后台模式设置为true时,它假设您正在更改后台模式,以便取消任何正在进行的即时扫描作业(仅为前台使用而设计),切换到没有扫描作业的后台操作。由于第一个BeaconManager:startMonitoringBeaconsInRegionBeaconManager:setBackgroundMode都触发了一个"重新调度"过程,因此会发生两次调度。您可以通过在初始化过程的早期先调用BeaconManager:setBackgroundMode:来避免所有这些混乱。这样,当您调用BeaconManager:startMonitoringBeaconsInRegion时,库已经处于后台模式,工作将更加顺利。

  2. Android作业调度程序的工作方式是,如果你以最频繁(约15分钟)的间隔设置一个周期性作业,它不会立即运行。因此,当库以后台模式启动备份时,在下一个间隔开始之前,它不会执行任何操作。这个间隔可能很快,也可能长达25分钟。如果我们确定最后一个扫描作业在很长一段时间内没有通过某个持久的时间戳运行,则可以通过安排立即扫描作业来优化此过程。这是一个合理的优化,如果您有兴趣处理拉请求,可以通过准备拉请求将其添加到库中。

  3. 库仅在扫描周期完成后设置低功耗意向传递扫描,因为这是正常的操作过程。我同意,如果应用程序被终止,那么在应用程序重新启动时,不一定会尽快进行设置。优化这一点的最简单方法是完成上面(2)中提出的优化,这将作为副作用解决这个问题。

  4. 如果你不想损害距离估计的准确性,你希望硬件信标的发射功率尽可能高,你希望广告率尽可能高。每秒更少的数据包提供更少的统计样本,并增加距离估计的噪声。较低的输出功率增加了相对于信号的本底噪声,并且在1米与10米处的RSSI之间的可检测差异中给出非常小的裕度。我知道高发射机功率和高广告率会显著影响电池供电信标的寿命。然而,IMO如果你将发射机功率降低到足以节省电池的程度,或者将广告频率降低到5 Hz以下,那么你可能应该放弃距离估计。

  5. 如何最好地使用库实际上取决于您的用例。如果每大约15分钟扫描一次对于您的用例来说已经足够好了,那么您可能应该坚持使用背景模式。我不确定你描述的破解是否能在不修改的情况下使库按照你想要的方式运行。您可以尝试,但最终可能会花费比上面第(2)点所述的简单更改更多的时间。

  6. 理论上,Android确实支持硬件支持的API,支持与信标消失相关的快速回调。然而,不幸的是,Android的Doze功能使得这在大多数用例中都不可靠且毫无价值。在这里查看我的工作总结

最新更新