0

我正尝试在我的应用程序中使用地理栅栏。 到目前为止,我已经成功了,并且它在前台应用程序为 时可以很好地工作。 我正在使用Android模拟器进行检查,其中包含谷歌播放服务。 要检查这个我设置的位置参数,正如我所说的 它应用程序在前台时正常工作。当应用程序在后台时不会触发地理栅栏过渡

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

所以我试图用的,而不是IntentService 广播接收器,我已经注册的BroadcastReceiver清单文件 像这样:

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

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

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

我想过在Service中使用LocationServices.FusedLocationApi.requestLocationUpdates。因此,采用这种方法,我的应用程序将要求提供位置 更新,这可能会触发地理围栏转换。

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

回答

1

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

如果您的设备系统是Android 7并且您的应用程序已针对Android 7及更低版本,那么一切正常。

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

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

see this link

相关问题