自从新的Android 8更新发布以来,对后台服务的工作方式有许多限制。
因此,我的应用程序需要定期在后台获取用户位置。为此,我考虑使用Android网站建议的FusedLocationProviderClient。当位置被获取后,我只需要对信息进行一些简单的处理。
现在,我已经开发了以下代码示例:
因此,我的应用程序需要定期在后台获取用户位置。为此,我考虑使用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()
}
}
所以我有一个问题:
问:每次更新位置时,我应该使用定时作业吗?
如果我希望我的应用即使活动已关闭也能获取更新,听起来像是服务的工作对吧?但是随着这些新的更新,我的服务不会永远运行,所以它迟早会被杀死。
使用定期计划的作业,服务将在满足条件时启动,但似乎很奇怪要安排定期作业来更新位置,而不是使用一个独特的服务,利用间隔和最小位移进行新的更新。
requestLocationUpdates()在满足LocationRequest的条件(在此示例中为间隔和/或smallestDisplacement)时调用其回调。这就是我想要实现的,我想要一个请求位置更新的作业,不是多个作业重新安排,因为我需要请求位置。
是否有任何其他更好的方法来实现我所说的内容,或者我需要使用这种新的定时作业方法?
无论如何,对于这篇混乱的文章,抱歉,这是我在Stack Overflow上的第一个问题,谢谢 :)