我试图在我的应用程序中使用地理围栏。 到目前为止,我已经成功了,它在应用程序运行时非常有效 在前景。 我正在使用具有Google Play服务的Android模拟器进行检查。 为了检查这一点,我设置了位置参数,就像我说的那样 当应用程序在前台时,它可以正常工作。
但是当应用程序在后台时,似乎是转换 在我打开应用程序或打开Google地图应用程序之前,不会触发。
所以我尝试使用BroadcastReceiver而不是IntentService 我已经在清单文件中注册了broadcastreceiver 像这样:
<receiver android:name = ".GeofenceReceiver"
android:exported = "true"
android:enabled = "true"
/>
但我仍然有相同的结果..
那么当应用程序在后台时,如何触发Geofence转换呢?
我考虑在服务中使用LocationServices.FusedLocationApi.requestLocationUpdates
。因此,通过这种方法,我的应用程序将询问位置
更新,这可能会触发地理围栏过渡。
但可能会消耗电池,这是一种不好的做法。 那么,还有其他选择吗?
答案 0 :(得分:1)
行。 因此,由于电池问题,似乎是新的Android O背景限制。 在Android 8中,他们有关于后台进程(服务等)的“新规则”,以减少电池消耗。 在Android 8中,当应用程序不在前台(即用户在主页按钮上按下)时,如果您没有任何与您的应用相关的前景组件,即使它们是后台服务,您的服务也可能会被杀死。
如果您的设备系统是Android 7并且您已将应用定位到Android 7及更低版本,那么一切都会正常工作。
关于位置更新,为了节省电池消耗,更新将在每小时进行几次。
他们建议使用前台服务,这样您的应用程序仍将被视为前台。