背景:
我正在开发一个Android应用程序,用于监视后台中的特定信标,并在进入检测时执行自定义编码。我目前正在使用Android Beacon Library进行探索,并且能够在屏幕开启(大约几秒钟)的大部分时间内响应性地检测到信标。
但是,当屏幕关闭时,响应性下降,可能需要几分钟到一半和一小时来检测。
我想知道是否有办法提高响应能力,因为我的使用场景需要响应式背景检测,而无需打开手机(查看可靠的<1分钟响应时间)。
我目前正在使用Android 8进行测试,但最终需要支持Android 6+。
具体问题:
1)使用Android Beacon Library,我正在尝试使用“new BackgroundPowerSaver(this)”这一行的参考应用程序。删除此行是否会提高响应能力(在Android 5-7,Android 8中),但需要耗费更多电量?
2)当我尝试删除“新的BackgroundPowerSaver(this)”行时,应用程序停止工作(无法监控,也无法进行测距)。我在清单中添加了蓝牙和精确位置权限。如何在没有backgroundpowersaver的情况下完成这项工作?
3)除了Android Beacon Library之外,我还没有探索其他SDK,例如来自Kontakt和Estimote的SDK。与Android Beacon Library相比,这些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+上进行测试,请确保您拥有该版本。