如何强制fusedlocation -providerclient明确要求一个新的位置?
几个月前,我升级了FusedLocationProviderClient。从那以后,要求采样新位置不会提供新的位置。
// Request a single location.
// Note: FusedLocationProviderClient.lastLocation
// is no better
val request = LocationRequest()
.setNumUpdates(1)
.setExpirationDuration(0)
.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY)
.setMaxWaitTime(10*DateUtils.SECOND_IN_MILLIS)
.setFastestInterval(0)
fusedLocationClient?.requestLocationUpdates(request, object:LocationCallback() {
override fun onLocationResult(result: LocationResult?) {
super.onLocationResult(result)
Log.v(LOG_TAG, "Single fused location request yields ${result?.lastLocation} ")
callOnDone(result?.lastLocation)
}
}, Looper.getMainLooper())
当我获得请求位置时,甚至相隔几秒
我将模拟器与曲目的GPX录音一起使用,以便GPS读数始终可用。
但是,当我尝试从位置管理器请求位置(并且对结果无能为力(时,它的效果要好得多。
(context?.getSystemService(Context.LOCATION_SERVICE) as? LocationManager)?
.requestSingleUpdate(
LocationManager.GPS_PROVIDER,
object :LocationListener{...dummy, just log the callback...},
Looper.getMainLooper())
结论:即使在高优先级模式下,FusedLocationProviderClient也不会从OS请求新位置。但是,如果可以从外部使用,它确实可以接受新的位置。
问题是:如何 force fusedlocationProviderClient在我现在和现在需要一个新位置时主动请求新位置?
这个问题很老,但是我带着类似的问题来到这里,在过去的几个月中,我看到大约有65个有65个。以下代码有效。它提供一个位置到locationResult.getLastLocation((到OnLocationResult回调:
public void getNewLocation() {
LocationRequest locationRequest = new LocationRequest()
.setNumUpdates(1)
.setFastestInterval(0)
.setSmallestDisplacement(0)
.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
if (ActivityCompat.checkSelfPermission(context,
Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED
&& ActivityCompat.checkSelfPermission(context,
Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
return;
}
fusedLocationProviderClient.requestLocationUpdates(locationRequest,
new com.google.android.gms.location.LocationCallback() {
@Override
public void onLocationResult(LocationResult locationResult) {
locationListener.onLocationChanged(locationResult.getLastLocation());
}
},
Looper.getMainLooper());
}
这里的区别在于我已经删除了SetMaxWaittime和setExpirationDuration。显然他们打断了电话。如果我解释正确正确地进行了setExpiration duration,这意味着此请求应在x毫里。将其设置为零表示请求立即到期,因此当位置确实可用时,请求已经过期。因此,没有回到onLocation changed。
我希望这对某人有帮助。