【发布时间】:2021-08-19 10:42:18
【问题描述】:
我在我的应用中使用 altbeacon android 库进行信标检测。它默认运行 前台服务 作为一项功能,但我只想在进入 信标区域 或检测到一个信标时运行前台服务。这个问题似乎没有在任何地方记录。你能帮帮我吗?
【问题讨论】:
标签: service ibeacon altbeacon ibeacon-android android-ibeacon
我在我的应用中使用 altbeacon android 库进行信标检测。它默认运行 前台服务 作为一项功能,但我只想在进入 信标区域 或检测到一个信标时运行前台服务。这个问题似乎没有在任何地方记录。你能帮帮我吗?
【问题讨论】:
标签: service ibeacon altbeacon ibeacon-android android-ibeacon
使用 AndroidBeaconLibrary 2.19+,自动绑定 API 可用于在检测后轻松切换到使用前台服务。
基本步骤是:
在自定义应用程序类中,在onCreate() 方法中调用beaconManager.startMonitoring(region)。这会使用计划作业设置初始信标检测。
当您收到对didEnterRegion() 的回调时,您需要为所有受监控和范围的区域调用beaconManager.stopMonitoring(...) 和beaconManager.stopRanging(...)。
在第 2 步之后,为前台服务配置库,如图所示 here
再次开始监视/测量任何所需区域。
谨慎使用上述方法,在某些情况下作为标准 Android will block starting a foreground service from the background in Android 12。此外,一些非标准 OEM 已经在较早的 Android 版本上执行此操作。
一般而言,建议的做法是仅在 (a) 应用位于前台或 (b) 您知道用户最近与您应用的 UI 进行交互时才设置前台服务。如果 Android 阻止您的应用程序启动前台服务,则在配置了前台服务的情况下从后台启动监控/测距将导致您的应用程序崩溃。由于可能导致这种情况的条件复杂且难以预测,因此该技术可能会导致意外崩溃和相关错误。
上述方法的一种替代方法是使用库中引入的新IntentScanStrategy,它可以在不需要前台服务的情况下进行更快的后台扫描。
【讨论】: