我有altbeacon library的问题。我正在准备一个小型库,其中一个模块扫描背景和前景中的信标。我在Github上的一个库中找到了示例应用程序,我已经测试了他们的代码(应用程序类),一切正常。用户进入任务切换器并从屏幕上滑动应用程序后,将在后台继续扫描。
但我正在创建一个库,所以我无法将我的代码粘贴到Application类中。考虑到这一点,我需要做这样的事情:MyLibrary.init(this)在ApplicationClass中的onCreate方法中。所以我编写了一个BeaconService类,其代码与应用程序类完全相同。我已经传递给这个类应用程序上下文(我通过调试我的代码检查了我的BeaconService应用程序上下文)。之后当应用程序没有通过从任务切换器交换杀死时,evrything工作完美。杀死应用程序后,我退出了区域事件,即使信标距离设备大约20厘米,我也无法继续扫描。
我在altbeacon Github上创建了一个问题(你可以找到我的示例代码并记录here),我得到的答案是库不符合我的要求。此外,如果我有进一步的问题如何解决我的问题,我应该在stackoverflow上询问。
所以我有一个想法,也许我可以使用WorkManager并一次又一次地重新安排扫描信标工作者(OneTimeWork)。这可能是围绕从Android 8+引入的调度后台任务的延迟限制的一种方法。
承诺的示例代码:
class BeaconWorker(appCtx: Context, workerParameters: WorkerParameters) : CoroutineWorker(appCtx, workerParameters) {
override val coroutineContext: CoroutineDispatcher
get() = Dispatchers.Default
override suspend fun doWork() = supervisorScope {
// rescheduling worker
if(isActive) {
enqueNextWork()
}
// make scan (This could be only one scan with list of found beacons)
val beacons = makeScan()
Result.success()
}
}
如何使用altbeacon库实现这一目标?