Android altbeacon在后台运行时间隔不等

时间:2019-03-14 09:42:56

标签: android bluetooth altbeacon

我正在开发一个运行后台服务的应用程序,该应用程序可以在一定间隔内对蓝牙信标进行定位。

我用计时器启动ForegroundService,每分钟以200毫秒的间隔每分钟启动信标10秒钟,计算最强的信标并将其提交给后端API。

只要应用程序处于前台状态,并且在屏幕关闭时,只要我使用adb logcat进行连接,此方法就可以正常工作。一旦我将其取下,就不再有任何内容提交到服务器,这意味着不再有远程信标。

以下是相关的代码段,希望我不要做太多简化:

$object->{'Cant\Access\This'}

1 个答案:

答案 0 :(得分:2)

在OS版本8+上,Android限制后台处理,除非它是前台服务或JobScheduler发起的作业的一部分。由于此限制,默认情况下,Android Beacon库将在Android 8+上使用JobScheduler。在前台,“即时” ScanJob将不断运行以进行扫描。在后台(意味着在解锁屏幕后看不到任何活动的情况下),Android不允许这样做。每〜15分钟最多可以安排一次作业。这就是为什么您看到扫描停止的原因。

拥有自己的前台服务没关系。 Android仍会对在该前台服务之外执行的任何后台处理实施这些限制。

两种选择:

  1. 遵守工作限制(每15分钟扫描一次)。使用BackgroundPowerSaver在前景/背景模式之间自动切换并设置beaconManager.setBackgroundScanPeriod(5000)(每15分钟扫描5秒。)为清晰起见,您还应该设置beaconManager.setBackgroundBetweenScanPeriod(15*60*1000)(15分钟),尽管您可以设置较低的值,Android 8+上的操作系统将不允许这样做。

  2. 按照here所述,将库设置为使用其自己的前景服务(是,作为第二个前景服务)进行扫描。然后,您可以停止使用或保留自己的前台服务。如果保留它,您将看到有关两个正在运行的前台服务的两个通知图标。如果您想保留两个前台服务并仅显示一个通知,可以使用combine those two notifications