背景:
我正在开发一个 Android 应用程序,用于监视后台的特定信标,并在检测到进入时执行自定义编码。 我目前正在使用 Android Beacon 库对此进行探索,并且能够在屏幕打开时(几秒钟内)的大部分时间响应地检测到信标。
但是,当屏幕关闭时,响应能力会下降,可能需要几分钟到半小时才能检测到。
我想知道是否有方法可以提高响应能力,因为我的使用场景需要响应式后台检测,而无需打开手机(查看可靠的 < 1 分钟响应时间)。
我目前使用 Android 8 进行测试,但最终需要支持 Android 6+。
具体问题:
1) 使用 Android Beacon 库,我正在尝试使用“new BackgroundPowerSaver(this)”行的引用应用程序。删除这条线是否会提高响应能力(在 Android 5-7、Android 8 中),但会增加功耗?
2) 当我尝试删除“new BackgroundPowerSaver(this)”行时,应用程序停止工作(无法监控,也无法进行测距)。我已在 list 中添加了蓝牙和精细位置权限。在没有后台节能程序的情况下如何实现此功能?
3) 除了 Android Beacon Library 之外,我还没有探索过其他 SDK,例如来自 Kontakt 和 Estimote 的 SDK。与 Android Beacon 库相比,这些 SDK 是否能够支持响应更快的后台监控?
4) 除了 Android Beacon Library 之外,如果我直接使用 Android 蓝牙 API,是否可以实现后台所需的响应能力?有引用应用吗?
谢谢。
最佳答案
BackgroundPowerSaver 自动在恒定扫描(前台)和占空比扫描(后台)之间切换。如果删除它,您最终将一直进行持续扫描,这将在 Android 4.3-7.x 上消耗更多电量。
然而,Android 8 有新的限制,阻止执行此操作。 操作系统限制后台应用程序在后台运行的时间每次不超过 10 分钟。无论您使用哪种扫描 SDK 或内置 API,都存在此操作系统限制。Android 8 上的作业计划程序允许计划的扫描作业最多每 15 分钟运行一次(有时由于操作系统延迟,运行时间会更长) ),因此这是运行扫描频率的限制因素。
我写了一篇关于此的博客文章 here
如果您希望实现持续的后台扫描,请为您的应用设置前台服务。前台服务会在屏幕顶部向用户显示一个图标,让他们知道它正在运行,然后允许应用程序无限期地在后台运行,即使在 Android 8 上也是如此。
编辑:在 Android 8.1+ 上,如果屏幕关闭,扫描将被阻止,除非您附加了过滤器。 Android Beacon Library 2.13 及更高版本会自动设置过滤器,以确保在这种情况下这些扫描不会被阻止。如果在屏幕关闭的情况下在 Android 8.1+ 上进行测试,请确保您拥有该版本。
关于bluetooth-lowenergy - 后台信标监控的响应能力(Android Beacon Library/Kontakt SDK/Estimote SDK),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49043925/