应用程序在后台时不会触发地理围栏转换

Posted

技术标签:

【中文标题】应用程序在后台时不会触发地理围栏转换【英文标题】:Geofence Transitions is not triggered when application is on background 【发布时间】:2018-01-08 09:47:08 【问题描述】:

我正在尝试在我的应用程序中使用地理围栏。 到目前为止,我已经成功,并且当应用程序运行时它可以完美运行 在前台。 我正在检查具有 google play 服务的 android Emulator。 为了检查这一点,我正在设置位置参数,正如我所说 当应用程序在前台时它工作正常。

但是当应用程序在后台时,似乎转换 在我打开应用程序或打开 Google 地图应用程序之前不会触发。

所以我尝试使用 BroadcastReceiver 而不是 IntentService 我已经在清单文件中注册了广播接收器 像这样:

<receiver android:name     = ".GeofenceReceiver"
          android:exported = "true"
          android:enabled  = "true"
/>

但我仍然有相同的结果..

那么当应用程序在后台时如何触发地理围栏转换?

我考虑过在服务中使用LocationServices.FusedLocationApi.requestLocationUpdates。因此,通过这种方法,我的应用程序将询问位置 更新,这可能会触发地理围栏转换。

但它可能会消耗电池,这是一种不好的做法。 那么,还有其他选择吗?

【问题讨论】:

【参考方案1】:

好的。 所以这似乎是由于电池问题导致的新Android O背景限制。 在 Android 8 中,他们有关于后台进程(服务等)的“新规则”,以减少电池消耗。 在 Android 8 中,当应用程序不在前台时(即用户按下 Home 按钮),即使它们是后台服务,您的服务也可能会被终止,以防您在前台没有任何与您的应用程序相关的组件。

如果您的设备系统是 Android 7 并且您的应用程序已针对 Android 7 或更低版本,一切都会正常工作。

关于位置更新,为了节省电量,每小时会更新几次。

他们建议使用前台服务,这样您的应用程序仍将被视为前台。

see this link

【讨论】:

以上是关于应用程序在后台时不会触发地理围栏转换的主要内容,如果未能解决你的问题,请参考以下文章

应用程序在后台时未触发地理围栏通知

应用程序在后台时的地理围栏设备

实施地理围栏 - 在应用程序未运行时接收地理围栏转换事件

如何在奥利奥后台监控地理围栏?

背景中的地理围栏

在后台某个时间后未触发Android地理围栏?