Android信标库如何将前台服务转换为后台模式?

时间:2019-08-05 04:47:41

标签: android beacon altbeacon ibeacon-android

我要实现的是,当用户进入地理围栏时,信标前台服务将开始运行,并且在检测到一个信标后,我将终止该前台服务并开始在后台运行它,就像{ {1}}库。

android-beacon-library-reference

对于private fun monitorBeacons(startForegroundService: Boolean) { var beaconManager = WolApp.appContext?.beaconManager if (beaconManager == null) { WolApp.appContext?.beaconManager = BeaconManager.getInstanceForApplication(WolApp.appContext!!) beaconManager = WolApp.appContext?.beaconManager beaconManager?.backgroundMode = true beaconManager?.beaconParsers?.clear() beaconManager?.beaconParsers?.add(BeaconParser().setBeaconLayout("m:2-3=0215,i:4-19,i:20-21,i:22-23,p:24-24")) beaconManager?.removeAllMonitorNotifiers() } if (startForegroundService) { setupForegroundNotificationService(WolApp.appContext!!) } else { WolApp.appContext?.regionBootstrap?.disable() WolApp.appContext?.regionBootstrap = null try { WolApp.appContext?.beaconManager?.disableForegroundServiceScanning() } catch (e: IllegalStateException) {} if (beaconManager?.scheduledScanJobsEnabled == false) { beaconManager.setEnableScheduledScanJobs(true) beaconManager.backgroundBetweenScanPeriod = BeaconManager.DEFAULT_BACKGROUND_BETWEEN_SCAN_PERIOD beaconManager.backgroundScanPeriod = BeaconManager.DEFAULT_BACKGROUND_SCAN_PERIOD } } if (WolApp.appContext?.regionBootstrap == null) { WolApp.appContext?.regionBootstrap = RegionBootstrap(WolApp.appContext!!, regions)//regions are some iBeacon regions } if (!startForegroundService) { WolApp.appContext?.backgroundPowerSaver = BackgroundPowerSaver(WolApp.appContext!!) } } 方法,与setupForegroundNotificationService库相同。

我不确定我是对还是错,有人可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

打开或关闭前台服务有点棘手,因为您试图更改已经在现有服务中后台运行的多个执行线程的行为。

显示的代码缺少的关键是,还必须确保已停止扫描库,然后才能进行切换。这很复杂,因为它是异步的-扫描程序需要花费一些时间来关闭其线程。

如果使用regionBootstrap,则对regionBootstrap.disable()的调用会执行此操作。 (如果不使用beaconManager.unbind(...),也可以使用regionBootstrap)。但是问题在于,当扫描服务完全关闭时,这些API不会给您回调。在关闭之前重新启动它可能会导致问题。除了可能使用计时器外,我这里没有什么好建议-在停止和开始之间说一秒钟?

您可能还想看一下有关类似设置的讨论: https://github.com/AltBeacon/android-beacon-library/issues/845