AltBeacon库中的“setForegroundScanPeriod”和“setForegroundBetweenScanPeriod”是否与BLE标准的扫描窗口和扫描间隔匹配?此外,这是指3个广告渠道中每个渠道的扫描事件,还是扫描窗口中是否会扫描3个渠道?
我每400毫秒在单个通道(CH39)上进行一次信标广告,并希望适当地设置我的扫描窗口和扫描间隔,以确保最大的数据包接收率与Android允许您控制的这两个选项。
我也愿意就此事尝试其他建议。
谢谢,
Android Beacon Library的setForegroundScanPeriod和setForegroundBetweenScanPeriod设置是一个高级概念,旨在控制:
库的设置与BLE标准的ScanWindow和ScanInterval不同。图书馆的设置是一个更高层次的概念。
正如您所述,ScanInterval和ScanWindow的BLE标准概念控制进行BLE扫描的设备在收听每个不同BLE广告渠道之间的旋转速度。不幸的是,Android API无法直接控制这些间隔 - 它们由Android制造商提供给固件。此外,Android没有为您确定设置的内容,甚至是在检测到广告数据包时接收器设置为哪个广告频道(对RSSI测量产生不利影响,请参见下文)。您提供的扫描设置有限通过Android是可见的here. SCAN_MODE_LOW_POWER与SCAN_MODE_LOW_LATENCY可能会影响这些间隔(他们在开源Android代码中),但Android制造商可能会随意调整。除了特定的后台模式状态外,Android Beacon Library通常使用SCAN_MODE_LOW_LATENCY。
通常,与上面提到的库设置相比,烘焙到Android固件中的这些BLE标准设置会有所不同。 (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.在三星设备上,ScanInterval接近规格允许的最大值,大约10秒。我的轶事测试表明,其他制造商设备的烘烤设置通常较短。
无法控制Android上的频道跳跃率意味着无法检测到2/3的广告,而在三星设备上,您通常会在没有任何检测的情况下持续20秒。