Android Beacon Library - 手动启动后台扫描

Android Beacon Library - Manually starting background scan

这是关于 Android Beacon Library 的问题。


由于Android8(Oreo)对后台服务的限制,本库作者在Android8.

中更改了启动后台服务的机制

据我观察,后台服务需要比 Android 7 或更低版本更长的时间来启动,即使应用程序已经启动

我想做的就是尽量减少这个时间
其中一种方法是在用户打开应用程序时强制启动后台扫描。
例如,我想做一些像

BeaconManager.getInstanceForApplication(this).startbackgroundScanningIfNotRunning();

在 MainActivity 的 onCreate() 中。

但我认为没有这样的API。有办法吗?

或者,图书馆是否可以自行处理(通过应用程序更新)?

虽然可以像问题中描述的那样做一些事情,但它可能没有用。问题是 Android 8 阻止应用程序在后台 运行 long-term。为了在后台手动启动扫描,您的应用程序必须首先 运行。如果 Android 8 不允许这样做,那么无论如何你都做不到。

有关 Android 8 如何在后台阻止来自 运行 的应用程序以及库如何解决此问题的说明,如果您还没有阅读此博客 post : http://www.davidgyoungtech.com/2017/08/07/beacon-detection-with-android-8

如果您以某种方式设法让您的应用运行long-term进入后台(例如通过使用前台服务),您可以随时踢通过在前台模式(从库的角度)启动信标 ranging/monitoring 手动关闭扫描,这将安排一个即时 ScanJob,它将保持 运行 并一遍又一遍地自行启动。为确保您处于前台模式,您只需要避免使用 BackgroundPowerSaver 并且不对 beaconManager.setBackgroundMode(...) 进行任何调用即可。