【发布时间】:2018-08-18 22:35:31
【问题描述】:
自从这次新的 Android 8 更新发布以来,许多limitations 强加于后台服务的工作方式。
所以我的应用需要在后台定期获取用户的位置,为此,我考虑使用 Android 网站建议的 FusedLocationProviderClient。 获取位置后,我只需要对信息进行一些简单的处理。
现在我开发了这个代码示例:
private fun updateLocation(){
//Location Request
val mLocationRequest = LocationRequest();
mLocationRequest.smallestDisplacement = 1000f;
mLocationRequest.interval = 5*60*1000;
mLocationRequest.priority = LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY;
//Location Provider
val mFusedLocationProviderClient = LocationServices.getFusedLocationProviderClient(this)
//Check Location Permission
if(PermissionChecker.checkSelfPermission(this,ACCESS_FINE_LOCATION)==PackageManager.PERMISSION_GRANTED)
//Request Location
mFusedLocationProviderClient.requestLocationUpdates(mLocationRequest,locationCallback,null);
}
private val locationCallback = object:LocationCallback(){
override fun onLocationResult(locationResult: LocationResult?) {
doSomeWork()
}
}
所以我有一个问题:
问。每次我想更新位置时是否应该使用计划作业?
如果我希望我的应用在活动已关闭的情况下也能获得更新,这听起来像是服务的工作,对吧?但是有了这个新的更新,我的服务不会永远运行,所以它迟早会被杀死。
使用定期安排的作业,服务将在满足条件时启动,但安排定期作业来更新位置似乎有点奇怪,而不是使用利用Interval 和 SmallestDisplacement 以获得新的更新。
每次满足 LocationRequest 的条件(本示例中的间隔和/或 minimumDisplacement)时,requestLocationUpdates() 都会调用他的回调。这就是我想要完成的工作,我想要一份请求位置更新的工作,不是多个重新安排的工作,因为我需要请求位置的更新。
有没有其他更好的方法来完成我想说的或者我需要这种新的计划作业方法?
无论如何,对于这篇凌乱的帖子感到抱歉,这是我在 Stack Overflow 上的第一个问题 谢谢:)
【问题讨论】: