Fused Location Provider:有没有办法检查位置更新是否失败?
Fused Location Provider: Is there a way to check if a location update failed?
简介
在我的应用程序中,我想获得用户当前所在位置的一次性准确位置。当我使用 FusedLocationProviderApi.getLastLocation
时,有时这将是 null 或过时的位置,因为我发现这只是获取一个缓存位置并且不请求新的位置更新。
解决方案是只请求一次位置更新,如下所示。
LocationRequest locationRequest = LocationRequest.create()
.setNumUpdates(1)
.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY)
.setInterval(0);
LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient,locationRequest,this)
现在我总能得到更准确的位置。
我的问题
如何确定位置更新是否失败?因为我只要求 1.
当获得位置更新时调用此回调
@Override
public void onLocationChanged(Location location) {
}
但是,如果位置更新失败,则不会调用此方法。
我试过的
我看到有一个 ResultCallback。但是,即使一次性位置更新失败,似乎也总是会调用 onSuccess。
LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient,locationRequest,this).setResultCallback(new ResultCallbacks<Status>() {
@Override
public void onSuccess(@NonNull Status status) {
DebugUtils.log("requestLocationUpdates ResultCallback onSuccess + " + status.toString(),true,true);
}
@Override
public void onFailure(@NonNull Status status) {
DebugUtils.log("requestLocationUpdates ResultCallback onFailure + " + status.toString(),true,true);
}
});
其他
使用com.google.android.gms:play-services-location:8.4.0
感谢阅读,请帮帮我
在深入研究 API 并进行了一些测试后,我找到了解决问题的方法,似乎有效。
LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, locationRequest, new LocationCallback() {
@Override
public void onLocationResult(LocationResult result) {
DebugUtils.log("onLocationResult");
}
@Override
public void onLocationAvailability(LocationAvailability locationAvailability) {
DebugUtils.log("onLocationAvailability: isLocationAvailable = " + locationAvailability.isLocationAvailable());
}
}, null);
而不是使用 LocationListener
。我用了 LocationCallback
onLocationResult
仅调用以提供基于 LocationRequest
的最新位置结果。如果无法提供位置,则不会调用它,并且在我的测试期间,当禁用位置和在室内使用 GPS 等时不会调用它。请调用 result.getLastLocation()
以获取实际位置对象。
onLocationAvailablity
总是被调用。 locationAvailability.isLocationAvailable()
Returns 如果设备位置已知且在活动 LocationRequest 请求的提示中合理更新,则为真。当无法确定位置可能由多种原因引起时返回 False,包括禁用的位置设置或无法检索设备环境中的传感器数据。
我在没有定位服务的情况下进行了测试,仅在室内使用 GPS。在每种情况下,我都删除了所有现有的位置历史记录(以防止缓存位置)。始终返回准确的最新位置。
其他人可以证明这一点吗?
注意:requestLocationUpdates
调用的最后一个参数是循环程序。传入 null 意味着它将使用调用线程的消息队列。
简介
在我的应用程序中,我想获得用户当前所在位置的一次性准确位置。当我使用 FusedLocationProviderApi.getLastLocation
时,有时这将是 null 或过时的位置,因为我发现这只是获取一个缓存位置并且不请求新的位置更新。
解决方案是只请求一次位置更新,如下所示。
LocationRequest locationRequest = LocationRequest.create()
.setNumUpdates(1)
.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY)
.setInterval(0);
LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient,locationRequest,this)
现在我总能得到更准确的位置。
我的问题
如何确定位置更新是否失败?因为我只要求 1.
当获得位置更新时调用此回调
@Override
public void onLocationChanged(Location location) {
}
但是,如果位置更新失败,则不会调用此方法。
我试过的
我看到有一个 ResultCallback。但是,即使一次性位置更新失败,似乎也总是会调用 onSuccess。
LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient,locationRequest,this).setResultCallback(new ResultCallbacks<Status>() {
@Override
public void onSuccess(@NonNull Status status) {
DebugUtils.log("requestLocationUpdates ResultCallback onSuccess + " + status.toString(),true,true);
}
@Override
public void onFailure(@NonNull Status status) {
DebugUtils.log("requestLocationUpdates ResultCallback onFailure + " + status.toString(),true,true);
}
});
其他
使用com.google.android.gms:play-services-location:8.4.0
感谢阅读,请帮帮我
在深入研究 API 并进行了一些测试后,我找到了解决问题的方法,似乎有效。
LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, locationRequest, new LocationCallback() {
@Override
public void onLocationResult(LocationResult result) {
DebugUtils.log("onLocationResult");
}
@Override
public void onLocationAvailability(LocationAvailability locationAvailability) {
DebugUtils.log("onLocationAvailability: isLocationAvailable = " + locationAvailability.isLocationAvailable());
}
}, null);
而不是使用 LocationListener
。我用了 LocationCallback
onLocationResult
仅调用以提供基于 LocationRequest
的最新位置结果。如果无法提供位置,则不会调用它,并且在我的测试期间,当禁用位置和在室内使用 GPS 等时不会调用它。请调用 result.getLastLocation()
以获取实际位置对象。
onLocationAvailablity
总是被调用。 locationAvailability.isLocationAvailable()
Returns 如果设备位置已知且在活动 LocationRequest 请求的提示中合理更新,则为真。当无法确定位置可能由多种原因引起时返回 False,包括禁用的位置设置或无法检索设备环境中的传感器数据。
我在没有定位服务的情况下进行了测试,仅在室内使用 GPS。在每种情况下,我都删除了所有现有的位置历史记录(以防止缓存位置)。始终返回准确的最新位置。
其他人可以证明这一点吗?
注意:requestLocationUpdates
调用的最后一个参数是循环程序。传入 null 意味着它将使用调用线程的消息队列。