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(...)
进行任何调用即可。
这是关于 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(...)
进行任何调用即可。