问题
客户反映在Android 8.0手机上,当应用锁屏或者按Home键处于后台的情况下,Goolgle地图当前实时位置更新失败。
原因
为了减少电量消耗,Android 8.0会限制处于后台应用获取当前位置的频率,而且不论当前应用的目标SDK是哪个版本。
1 | Important note : As a starting point, we only allow the background app to receive location updates several times an hour. We will continue to optimize the location update interval based on system impact and developer feedback throughout the preview period. |
处于后台的应用只能实现一个小时几次的实时位置更新,当应用处于前台,实时位置更新功能和低版本的一样,不会受到次数限制。
对于需要频繁获取实时位置的应用,Google对此提供了优化办法。
优化应用位置获取
通过执行下列操作之一来提高位置更新的检索频率:
将应用转至前台
使用Geofencing(
GeofencingApi
接口)之类的API,google对这些api进行了优化以尽可能减少电量消耗。使用被动定位监听器,它可以增加位置更新的获取频率
受影响的APIs
当应用处于后台,一下api会受到影响
Fused Location Provider(FLP)
Geofencing
GNSS Measurements and GNSS Navigation Messages`
Location Manager
代码实践
在应用中启动一个Foreground Service
来提高实时位置获取频率,本应用使用Fused Location Provider
获取当前定位
创建一个前台服务
1 |
|
在AndroidManifest.xml文件中配置
1 | <!-- custom service : keep alive--> |
在MapActivity中开启服务
1 |
|