Android蓝牙扫描是通过onScanResult回调提供缓存/缓冲结果吗?

时间:2017-11-22 05:45:40

标签: android bluetooth bluetooth-lowenergy ibeacon beacon

我正在开发一些与BLE相关的应用程序。 疑问很简单,"我们使用android.bluetooth.le.ScanCallback onScanResult方法收到的BLE扫描结果是否提供了一组缓存结果?"

如果你没有清楚地告诉我,请让我通过深入研究实验来解释一下。

我正在使用来自Pinmicro (Card Beacon)的信标,我们将其配置为以100毫秒的间隔进行广播/通告。 我使用android.bluetooth.le.ScanSettings.SCAN_MODE_LOW_LATENCY模式开始扫描,当然我在Lolipop(Nexus 5 with 6.0.1,确切地说)的Android版本中运行它。我周围有大约100个信标,但在logcat中只记录了一个信标(比如TARGET信标)及其RSSI。

因此,当我开始扫描时,事情几乎可以持续2-3分钟,但进一步的RSSI更新有点延迟。请参阅以下方案:

  1. 开始扫描
  2. 将TARGET信标靠近Nexus 5 - 让RSSI在-30到-40左右
  3. 将TARGET信标远离Nexus 5 - 使RSSI在-60到-70左右
  4. 多次重复步骤2和3,在每个周期之间等待30秒
  5. 经过15或20个周期后,我在步骤2中将RSSI -60升至-70,在步骤3中将RSSI -30升至-40。
  6. 我假设的是,Android操作系统正在缓存所有BLE广告,并通过onScanResult回调调度这些缓存结果,这样可以在几秒钟后发送旧的缓存广告。我不确定,但情况会是这样吗?如果是这样,有没有办法从操作系统中清除BLE广告缓存?

    欢迎任何形式的建议,例如清除缓存的直接方法,解决方法,反射技术等。

    提前致谢!

1 个答案:

答案 0 :(得分:2)

没有缓存。只要您的应用程序足够快地处理它们就不会有延迟(否则它们会排队)。