AltBeacon库中的“ setForegroundScanPeriod”和“ setForegroundBetweenScanPeriod”是否与BLE标准的“扫描窗口”和“扫描间隔”匹配?另外,这是否涉及3个广告频道中的每个频道的扫描事件,还是3个频道的扫描会在扫描窗口中发生?
我每400毫秒在单个频道(CH39)上发布一个信标广告,并希望通过Android让您控制的这两个选项来适当设置我的扫描窗口和扫描间隔,以确保最大的数据包接收率。
我也愿意就此事尝试其他建议。
谢谢
答案 0 :(得分:0)
Android信标库的setForegroundScanPeriod和setForegroundBetweenScanPeriod设置是旨在控制以下内容的高级概念:
电池使用量
BLE扫描将在backgroundBetweenScanPeriod期间停止,从而允许您对扫描进行占空比调整以节省电池。通常将前景设置为0,将等效背景设置设置为更高的值(例如5-15分钟)。当应用程序不在前景中或屏幕关闭时,将应用“背景”设置,而当应用程序在照明屏幕上可见时,将应用“前景”设置。
信标搜索间隔
默认情况下,前台扫描间隔设置为1100毫秒。这意味着该库将在1100ms内寻找信标,跟踪该时段内检测到的所有信标的不同列表,然后在该间隔结束时(例如每1100ms)使用库将它们报告给应用程序。这类似于iOS对其CoreLocation API的处理速度为1000ms。它之所以默认为1100而不是1000的原因,是因为许多支持BLE的早期Android设备每次扫描都无法检测到多个不同的广告,因此必须在每个周期停止扫描,然后重新开始扫描以再次检测一次。默认周期设置为略大于1000ms,以避免与信标广告以1Hz的频率紧密同步。
该库的设置与BLE标准的ScanWindow和ScanInterval不同。该库的设置是一个更高层次的概念。
正如您所陈述的,ScanInterval和ScanWindow的BLE标准概念控制着进行BLE扫描的设备在侦听每个不同的BLE广告渠道之间旋转的速度。 不幸的是,Android API无法让您直接控制这些时间间隔-它们是由Android制造商烘焙到固件中的。此外,Android没有提供给您确定这些设置或什至是哪个API的API。检测到广告包时将接收方设置为广告频道(对RSSI测量有不利影响的部分,请参见下文。)可见Android提供的有限扫描设置here. SCAN_MODE_LOW_POWER与SCAN_MODE_LOW_LATENCY可能会影响这些间隔(它们在开放源代码Android代码中进行),但是Android制造商可以再次对此进行调整。除了特定的背景模式状态外,Android Beacon库通常使用SCAN_MODE_LOW_LATENCY。
通常,Android固件中包含的这些BLE-Standard设置与上述库的设置相比将有所不同。 (BLE规范说ScanInterval的范围可以从2.5毫秒到10,240毫秒)。但是,不同的Android型号之间的周期差异很大。您可以看到开源的Android定义in this answer,该定义将SCAN_MODE_LOW_LATENCY的ScanInterval设置为5000ms,但是请记住,每个制造商都可以根据自己的喜好调整常量。
由于广告检测的RSSI在每个广告渠道之间变化很小,但差异很大,因此您通常可以通过绘制Android设备上检测到的广告的RSSI来绘制Android设备的硬编码ScanInterval,方法是:所有广告渠道。 Plotting this on a graph of RSSI vs. time will show a stair step pattern, where the width of each step is equal to the ScanInterval.在Samsung设备上,大约10秒钟时,ScanInterval接近规范允许的最大值。我的轶事测试表明,其他制造商提供的设备的烘焙设置通常较短。
由于无法控制Android上的频道跳频速率,因此将不会检测到广告的2/3,而在Samsung设备上,您通常会在20秒内没有任何检测到。