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 设置是一个高级概念,旨在控制:
电池使用情况
BLE 扫描将在 foregroundBetweenScanPeriod 期间停止,让您可以循环扫描以节省电池电量。对于前景,这通常设置为 0,对于等效的背景设置,该值通常设置为更高的值(比如 5-15 分钟)。当应用程序不在前台或屏幕关闭时应用背景设置,当应用程序在照明屏幕上可见时应用前景设置。
信标搜索间隔
默认情况下,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 秒内没有任何检测。
AltBeacon 库中的"setForegroundScanPeriod" 和"setForegroundBetweenScanPeriod" 是否与BLE 标准的Scan Window 和Scan Interval 匹配?此外,这是否指的是 3 个广告频道中的每一个的扫描事件,或者 3 个频道的扫描是否会在扫描中发生 window?
我有一个每 400 毫秒在单个频道 (CH39) 上广播一次的信标,我想适当地设置我的扫描 window 和扫描间隔,以确保使用 [=20= 这两个选项的最大数据包接收率] 让你掌控
我也愿意为此尝试其他建议。
谢谢,
Android 信标库的 setForegroundScanPeriod 和 setForegroundBetweenScanPeriod 设置是一个高级概念,旨在控制:
电池使用情况
BLE 扫描将在 foregroundBetweenScanPeriod 期间停止,让您可以循环扫描以节省电池电量。对于前景,这通常设置为 0,对于等效的背景设置,该值通常设置为更高的值(比如 5-15 分钟)。当应用程序不在前台或屏幕关闭时应用背景设置,当应用程序在照明屏幕上可见时应用前景设置。
信标搜索间隔
默认情况下,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 定义
由于广告检测的 RSSI 在每个广告渠道之间变化很小但很重要,您通常可以通过绘制在 Android 设备上检测到的广告的 RSSI 来导出硬编码的 ScanInterval Android 来自使用所有广告渠道的广告商的设备。
无法控制 Android 上的频道跳频率意味着 2/3 的广告不会被检测到,而在三星设备上,您通常会在 20 秒内没有任何检测。