如何仅在进入信标区域时启用 altbeacon android 库前台服务?

How to enable altbeacon android library forground service only if entered beacon region?

我在我的应用程序中使用 altbeacon android 库进行信标检测。它 运行s 前台服务 默认为一个功能,但我只想 运行 当我进入 信标区域时的前台服务 或当检测到一个信标时。这个问题似乎没有在任何地方记录。你能帮我吗?

使用 AndroidBeaconLibrary 2.19+,自动绑定 API 可用于在检测后轻松切换到使用前台服务。

基本步骤是:

  1. 自定义应用程序class中,在onCreate()方法中调用beaconManager.startMonitoring(region)。这会使用预定作业设置初始信标检测。

  2. 当您收到 didEnterRegion() 的回调时,您需要为所有受监控和远程区域调用 beaconManager.stopMonitoring(...)beaconManager.stopRanging(...)

  3. 在第 2 步之后,如图所示为前台服务配置库 here

  4. 重新开始monitoring/ranging任何想要的区域。

小心使用上述方法,在某些情况下作为标准Android will block starting a foreground service from the background in Android 12。此外,一些非标准 OEM 已经在早期 Android 版本上执行此操作。

一般来说,建议的做法是仅在 (a) 应用程序位于前台或 (b) 您知道用户最近与您的应用程序的 UI 进行过交互时才设置前台服务。如果 Android 阻止您的应用程序启动前台服务,从后台启动 monitoring/ranging 配置了前台服务将导致您的应用程序崩溃。由于可能导致这种情况的条件复杂且难以预测,因此该技术可能会导致意外崩溃和相关错误。

上面的一个替代方法是使用库中引入的新 IntentScanStrategy,它允许更快的后台扫描而无需前台服务。