Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/223.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 融合位置提供程序:是否有方法检查位置更新是否失败?_Java_Android_Google Maps_Fusedlocationproviderapi - Fatal编程技术网

Java 融合位置提供程序:是否有方法检查位置更新是否失败?

Java 融合位置提供程序:是否有方法检查位置更新是否失败?,java,android,google-maps,fusedlocationproviderapi,Java,Android,Google Maps,Fusedlocationproviderapi,导言 在我的应用程序中,我想获得用户当前所在位置的一次性准确位置。当我使用FusedLocationProviderApi.getLastLocation时,有时这会是空的或过期的位置,因为我发现它只获取缓存位置,而不请求新位置更新 解决方案是只请求一次位置更新,如下所示 LocationRequest locationRequest = LocationRequest.create() .setNumUpdates(1) .s

导言

在我的应用程序中,我想获得用户当前所在位置的一次性准确位置。当我使用
FusedLocationProviderApi.getLastLocation
时,有时这会是空的或过期的位置,因为我发现它只获取缓存位置,而不请求新位置更新

解决方案是只请求一次位置更新,如下所示

 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) {

 }
但是,如果位置更新失败,则不会调用此函数

我尝试过的

我看到有一个结果回调。然而,即使一次性的位置更新失败,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);
            }
        });
LocationServices.FusedLocationApi.requestLocationUpdates(mgoogleapClient,locationRequest,this).setResultCallback(new ResultCallbacks()){
@凌驾
成功时公共无效(@NonNull状态){
DebugUtils.log(“requestLocationUpdates ResultCallback onSuccess+”+status.toString(),true,true);
}
@凌驾
public void onFailure(@NonNull状态){
DebugUtils.log(“requestLocationUpdatesResultCallbackonFailure+”+status.toString(),true,true);
}
});
其他

使用
com.google.android.gms:play服务位置: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()
,以获取实际的位置对象

始终调用onLocationAvailability
locationAvailability.isLocationAvailable()
如果设备位置已知并且在活动LocationRequests请求的提示内合理地处于最新状态,则返回true。当无法确定位置可能是由于多种原因造成的,包括禁用位置设置或无法在设备环境中检索传感器数据时,返回False

我在没有定位服务的情况下进行了测试,只在室内使用GPS。在每种情况下,我都删除了所有现有的位置历史记录(以防止缓存位置)。始终返回准确的最新位置

其他人能证明这一点吗


注意:
requestLocationUpdates
调用的最后一个参数是活套。传入null意味着它将使用调用线程的消息队列

尝试检查
onSuccess()
方法的
status
参数?是的,toString方法在失败时报告“status{statusCode=SUCCESS,resolution=null}”。您知道这方面的一些信息,我花了整整两天的时间。我将尽可能多地分享这个答案。它应该被标记为接受答案。@Ersen Osman感谢兄弟你救了我的命。……再次感谢你一次有什么办法可以提高定位结果吗?某些连接不良的设备将永远不会调用它。此外,OnLocationAvailability仅被调用2次,第一次返回True,第二次返回False,然后再也不会被调用。您能告诉我如何删除所有现有位置历史记录(以防止缓存位置)?