【问题标题】:How does the library detect a beacon in 5 seconds after app kill for platforms 5 - 7?库如何在平台 5-7 的应用程序终止后 5 秒内检测到信标?
【发布时间】:2019-07-24 17:36:00
【问题描述】:

我正在查看http://www.davidgyoungtech.com/2017/08/07/beacon-detection-with-android-8 此处的表格,我很困惑该库如何在 Android 平台 5-7 上实现应用程序终止后 5 秒的检测时间。这就是链接所说的 - Android 4.3-7.x 上的应用程序使用长期运行的后台服务或警报来定期在后台查找信标。据我所知,闹钟的设置时间不能少于 15 分钟,那么 5 秒的设置是如何工作的呢?

【问题讨论】:

    标签: android ibeacon-android


    【解决方案1】:

    您提到的我的博客文章的检测时间表(转载如下)说,Android 5.0-7.x 上的检测时间为 5 秒。 (澄清:它对 4.x 提出此要求。)通过使用 Android 5.0 中引入的 API 使用长时间运行的过滤低功耗扫描,这在 5.x-7 上是可能的。 Here's the code that sets that up.

    这样做的目的是将蓝牙 LE 芯片置于低功耗模式,如果看到任何与预期过滤模式匹配的数据包,该模式就会自动唤醒。唤醒后,Android 操作系统将扫描结果传递给库,然后库通过didEnterRegiondidRangeBeaconsInRegion 向应用程序发送回调。此过程通常在数据包出现后只需几秒钟。

    这些扫描时间与警报无关。在 Android 4.x-7.x 上,AlarmManager 用于完全不同的目的——保持长期运行的后台服务处于活动状态。警报会在以后重复重置 5 分钟,并且只要服务继续运行,它就永远不会关闭。如果应用程序由于内存不足或用户将其滑出屏幕而被终止,则此警报将触发 BroadcastReceiver 触发长时间运行的扫描服务重新启动。

    据我所知,Android 4.x-7.x 上没有任何东西可以限制警报每 15 分钟运行一次以上。您可能会想到 Android 8+ 的限制,即将定期 JobScheduler 项目限制为每 15 分钟或更长时间。

    Android 信标库检测时间:

    【讨论】:

    • 1)您在答案中提到了“长时间运行的过滤低功耗扫描”和“长时间运行的后台服务”。他们是一样的吗?一旦调用了 startScan 方法,这个长期运行的后台服务会做什么? (因为现在控制转移到蓝牙控制器,开始扫描后应用程序不需要做太多事情) 2)只是通过代码并想知道为什么 BluetoothLeScanner startScan 方法调用使用 WorkerThread?
    • 它们是一样的。后台服务在等待时什么也不做。它只是睡觉,但仍然活着。休眠和保持活动允许它等待结果进来。使用新线程是为了避免主 UI 线程上的处理过多,导致 UI 滞后。
    猜你喜欢
    • 2022-01-06
    • 1970-01-01
    • 2012-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多