- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如何强制 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 主动请求一个新位置?
最佳答案
这个问题已经很老了,但我带着类似的问题来到这里,我看到在过去的几个月里,大约有 65 个其他人提出了这个问题。以下代码有效。它提供了一个位置到 onLocationResult 回调,在 locationResult.getLastLocation():
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 .显然他们中断了通话。如果我解释setExpirationDuration 正确,这意味着这个请求应该在x 毫秒。将其设置为零意味着请求立即过期,因此当 Location 确实可用时,请求已经过期。因此没有回调到 onLocationChanged。
我希望这对某些人有帮助。
关于google-api - Android FusedLocationClient 不请求新样本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49491554/
我现在正在创建一个位置客户端,目前我已经 public void startUpdatingLocationProcess(Context context) { parentContext
我的 FusedLocationProviderClient 在我调用后没有停止 fusedLocationClient.removeLocationUpdates(locationCallback)
我制作了单个 Activity 应用程序,它可以获取用户的当前位置,并在用户跑大约 3 米时更新当前位置,我不知道如何在最小化或销毁时保存该应用程序的状态,以便从原来的位置开始,如果在此期间一切发生变
如何强制 FusedLocationProviderClient 显式请求新位置? 几个月前,我升级了 FusedLocationProviderClient。从那以后,请求采样新位置将不会提供新位置
在 Android 中选择 LocationManager 还是 FusedLocationClient 非常简单,只需选择 FusedLocationClient,因为它可以节省电量,并且推荐作为最
我是一名优秀的程序员,十分优秀!