- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在尝试在我的应用程序中使用地理围栏。到目前为止,我已经成功了,并且在应用程序运行时完美运行在前景中。我正在检查具有谷歌播放服务的 Android 模拟器。为了检查这一点,我正在设置位置参数,正如我所说当应用程序在前台时它工作正常。
但是当应用程序在后台时,转换似乎不会触发,直到我打开应用程序或打开 Google map 应用程序。
所以我尝试使用 BroadcastReceiver 而不是 IntentService并且我已经在 list 文件中注册了 broadcastreceiver像这样:
<receiver android:name = ".GeofenceReceiver"
android:exported = "true"
android:enabled = "true"
/>
但我仍然有相同的结果..
那么当应用程序在后台时,如何触发地理围栏转换?
我考虑过在服务中使用 LocationServices.FusedLocationApi.requestLocationUpdates
。因此,通过这种方法,我的应用程序将询问位置更新,这可能会触发地理围栏转换。
但它可能会消耗电池,这是一种不好的做法。那么,还有其他选择吗?
最佳答案
好的。所以这似乎是由于电池问题导致的新Android O后台限制。在 Android 8 中,他们有关于后台进程(服务等)的“新规则”,以减少电池消耗。在 Android 8 中,当应用程序不在前台(即用户按下主页按钮)时,即使它们是后台服务,您的服务也可能会被终止,以防您在前台没有任何与您的应用程序相关的组件。
如果您的设备系统是 Android 7 并且您已将您的应用定位到 Android 7 及更低版本,则一切都会正常运行。
关于位置更新,为了节省电池消耗,每小时更新几次。
他们建议使用前台服务,这样您的应用程序仍将被视为前台。
关于android - 应用程序在后台时不会触发地理围栏转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45439298/
我是一名优秀的程序员,十分优秀!