如何强制 FusedLocationProviderClient 明确要求新位置?
几个月前,我升级了 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 也不会从操作系统请求新位置。但是,如果可以从外部获得新位置,它确实接受新位置。
问题是:当我现在需要一个新位置时,如何强制FusedLocationProviderClient 主动请求一个新位置?