AltBeacon 库中的 ScanPeriod 和 BetweenScanPeriod 是什么意思?

What does ScanPeriod and BetweenScanPeriod mean in AltBeacon Library?

AltBeacon 库中的"setForegroundScanPeriod" 和"setForegroundBetweenScanPeriod" 是否与BLE 标准的Scan Window 和Scan Interval 匹配?此外,这是否指的是 3 个广告频道中的每一个的扫描事件,或者 3 个频道的扫描是否会在扫描中发生 window?

我有一个每 400 毫秒在单个频道 (CH39) 上广播一次的信标,我想适当地设置我的扫描 window 和扫描间隔,以确保使用 [=20= 这两个选项的最大数据包接收率] 让你掌控

我也愿意为此尝试其他建议。

谢谢,

Android 信标库的 setForegroundScanPeriod 和 setForegroundBetweenScanPeriod 设置是一个高级概念,旨在控制:

  1. 电池使用情况

    BLE 扫描将在 foregroundBetweenScanPeriod 期间停止,让您可以循环扫描以节省电池电量。对于前景,这通常设置为 0,对于等效的背景设置,该值通常设置为更高的值(比如 5-15 分钟)。当应用程序不在前台或屏幕关闭时应用背景设置,当应用程序在照明屏幕上可见时应用前景设置。

  2. 信标搜索间隔

    默认情况下,foregroundScanInterval 设置为 1100ms。这意味着该库将寻找 1100 毫秒的信标,跟踪它在此期间检测到的所有不同列表,然后在该时间间隔结束时(例如,每 1100 毫秒)使用该库将它们报告给应用程序。这类似于 iOS 以 1000 毫秒的速率对其 CoreLocation API 执行的操作。它默认为 1100 而不是 1000 的原因是因为许多支持 BLE 的早期 Android 设备每次扫描无法检测到多个不同的广告,因此必须在每个周期停止扫描并重新启动以再次检测一个。默认周期设置为略大于 1000 毫秒,以避免与以 1Hz 速率发布的信标紧密同步。

库的设置与 BLE 标准的 ScanWindow 和 ScanInterval 不是一回事。库的设置是一个更高层次的概念。

如您所述,ScanInterval 和 ScanWindow 的 BLE 标准概念控制执行 BLE 扫描的设备在侦听每个不同的 BLE 广告频道之间轮换的速度。 不幸的是,Android APIs 无法让您直接控制这些时间间隔——它们由 Android 制造商嵌入到固件中。 此外, Android 不会给您任何 API 来确定这些设置的内容,甚至在检测到广告数据包时接收器设置为哪个广告频道(这对 RSSI 测量有不幸的影响,请参见下文.) Android 提供的有限扫描设置是可见的 here. SCAN_MODE_LOW_POWER 与 SCAN_MODE_LOW_LATENCY 可能会影响这些间隔(它们在开源 Android 代码中),但同样,Android 制造商可以随意调整。 Android Beacon 库通常使用 SCAN_MODE_LOW_LATENCY 除了特定的后台模式状态。

一般来说,这些嵌入到 Android 固件中的 BLE 标准设置与上述库的设置不同。 (BLE 规范表示 ScanInterval 的范围可以从 2.5 毫秒到 10,240 毫秒)但是,不同 Android 模型之间的周期差异很大。您可以查看开源 Android 定义 ,其中 SCAN_MODE_LOW_LATENCY 将 ScanInterval 设置为 5000ms,但请记住,每个制造商都可以根据自己的喜好调整常量。

由于广告检测的 RSSI 在每个广告渠道之间变化很小但很重要,您通常可以通过绘制在 Android 设备上检测到的广告的 RSSI 来导出硬编码的 ScanInterval Android 来自使用所有广告渠道的广告商的设备。 在三星设备上,ScanInterval 接近规范允许的最大值,约为 10 秒。我的轶事测试表明,其他制造商设备的内置设置通常较短。

无法控制 Android 上的频道跳频率意味着 2/3 的广告不会被检测到,而在三星设备上,您通常会在 20 秒内没有任何检测。