由于新的Android 8更新出现了,因此对后台服务的工作方式施加了很多限制.
所以我的应用需要定期获取用户位置的背景,为此,我考虑使用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()
}
}
Run Code Online (Sandbox Code Playgroud)
所以我有一个问题:
如果我希望我的应用程序即使活动已经关闭也能获得更新,这听起来像是服务的工作吗?但是通过这些新的更新,我的服务不会永远运行,所以它迟早会被杀死.
使用定期计划的作业,该服务将在满足条件时启动,但是安排常规作业更新位置似乎有点奇怪,而不是使用使用Interval和SmallestDisplacement进行新更新的唯一服务.
每次满足LocationRequest的条件时,requestLocationUpdates()都会调用他的回调(此示例中的interval和/或smallestDisplacement).这就是我想要完成的任务,我想要一个请求位置更新的工作,而不是重新安排多个工作,因为我需要更新请求该位置.
有没有其他更好的方法来实现我想说的或者我需要这种新的预定工作方法?
无论如何,对于这个凌乱的帖子抱歉,这是我在Stack Overflow上的第一个问题谢谢:)
| 归档时间: |
|
| 查看次数: |
2091 次 |
| 最近记录: |