这是关于Android Beacon Library的问题。
由于Android 8(Oreo)对后台服务的限制,该库的作者已经改变了在Android 8中启动后台服务的机制。
据我所知,后台服务需要比Android 7或更低版本更长的启动时间,即使应用已经启动。
我想做的是尽可能减少这段时间 其中一种方法是在用户打开应用程序时强制启动后台扫描 例如,我想做类似
的事情 BeaconManager.getInstanceForApplication(this).startbackgroundScanningIfNotRunning();
在MainActivity的onCreate()
中。
但我认为没有这样的API。反正有吗?
或者,库是否可以自行处理(通过应用程序更新)?
答案 0 :(得分:2)
虽然可以执行问题中描述的操作,但它可能没用。问题是Android 8会阻止应用程序在后台长期运行。要在后台手动启动扫描,您的应用必须首先运行。如果Android 8不允许这样做,那么无论如何你都无法做到这一点。
有关Android 8如何阻止应用程序在后台运行以及库如何解决此问题的解释,您可以阅读此博客文章,如果您还没有: http://www.davidgyoungtech.com/2017/08/07/beacon-detection-with-android-8
如果您以某种方式设法让您的应用在后台长期运行(例如使用前台服务),您可以始终通过启动信标测距/监控来手动启动扫描前台模式(从库的角度来看),它将安排一个即时的ScanJob,它将继续运行并反复启动。要确保您处于前台模式,您只需要避免使用BackgroundPowerSaver
,并且不要对beaconManager.setBackgroundMode(...)
进行任何调用。