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

时间:2017-08-01 13:30:43

标签: android android-geofence android-fusedlocation google-location-services

我试图在我的应用程序中使用地理围栏。 到目前为止,我已经成功了,它在应用程序运行时非常有效 在前景。 我正在使用具有Google Play服务的Android模拟器进行检查。 为了检查这一点,我设置了位置参数,就像我说的那样 当应用程序在前台时,它可以正常工作。

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

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

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

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

那么当应用程序在后台时,如何触发Geofence转换呢?

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

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

1 个答案:

答案 0 :(得分:1)

行。 因此,由于电池问题,似乎是新的Android O背景限制。 在Android 8中,他们有关于后台进程(服务等)的“新规则”,以减少电池消耗。 在Android 8中,当应用程序不在前台(即用户在主页按钮上按下)时,如果您没有任何与您的应用相关的前景组件,即使它们是后台服务,您的服务也可能会被杀死。

如果您的设备系统是Android 7并且您已将应用定位到Android 7及更低版本,那么一切都会正常工作。

关于位置更新,为了节省电池消耗,更新将在每小时进行几次。

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

see this link