【发布时间】:2018-08-18 10:21:32
【问题描述】:
我每 3 分钟运行一次前台服务。因此我的目标是:运行前台服务,获取当前用户位置,然后停止前台服务。 所以现在我用这个:
locationCallback = object : LocationCallback(){
override fun onLocationAvailability(locationAvailability: LocationAvailability?) {
super.onLocationAvailability(locationAvailability)
if(locationAvailability!!.isLocationAvailable){
fusedLocationClient.lastLocation.addOnSuccessListener { location: Location? ->
if (location != null) {
// do my action with this location and finish the foreground service
}
}
}else{
prepareFinishService() // finish service
}
}
}
fusedLocationClient.requestLocationUpdates(locationRequest,
locationCallback, Looper.getMainLooper())
还有我的位置请求:
fun createLocationRequest(): LocationRequest {
val locationRequest = LocationRequest.create()
locationRequest.interval = 10000L * 10
locationRequest.fastestInterval = 50000L
locationRequest.smallestDisplacement = 10f
locationRequest.priority = LocationRequest.PRIORITY_HIGH_ACCURACY
return locationRequest
}
但在这个解决方案中,我得到的不是新鲜的位置。例如用户更改位置但onLocationAvailability 重新运行以前的位置。一段时间后,例如在我的服务运行 15 分钟后,它返回一个更新的位置。
我知道我也可以添加这个回调:
override fun onLocationResult(locationResult: LocationResult?) {
// my action with location
}
但根据文档: onLocationResult
“即使当 isLocationAvailable() 返回 true 时,onLocationResult(LocationResult) 可能并不总是被定期调用,但是设备位置是已知的,并且最近交付的位置和 getLastLocation(GoogleApiClient) 都将是合理的最新的给定提示由活动的 LocationRequests 指定。”
这个函数可能不会被调用,我的服务会一直运行到下一次启动。我不想要这种情况。有什么办法可以一直访问当前服务然后停止服务?
【问题讨论】:
标签: java android kotlin geolocation