我使用altbeacon它运行前台服务作为默认功能,但我只想在进入信标区域时运行前台服务。或者当检测到一个信标时。这个问题似乎没有记录在任何地方。你能帮我吗?
使用AndroidBeaconLibrary 2.19+,可以使用自动绑定api在检测后轻松切换到使用前台服务。
基本步骤如下:
-
在自定义应用程序类,在
onCreate()
方法中调用beaconManager.startMonitoring(region)
。这将使用计划作业设置初始信标检测。 -
当你得到一个回调到
didEnterRegion()
时,你需要调用beaconManager.stopMonitoring(...)
和beaconManager.stopRanging(...)
的所有监控和范围区域。 -
在步骤2之后,为前台服务配置库,如下所示
-
再次开始监测/测距任何所需的区域。
小心上面的方法在某些情况下,标准Android会阻止从Android 12的后台启动前台服务。此外,一些非标准的oem厂商已经在早期的Android版本上这样做了。
一般来说,推荐的做法是只有在(a)应用程序在前台或(b)你知道用户最近与应用程序的UI进行了交互时才设置前台服务。如果Android阻止你的应用启动前台服务,那么在配置了前台服务的情况下从后台启动监控/测距会导致你的应用崩溃。由于可能导致这种情况的条件很复杂且难以预测,因此该技术可能导致意外的崩溃和相关的错误。
上面的一个替代方案是使用库中引入的新的IntentScanStrategy,它允许更快的后台扫描,而不需要前台服务。