融合位置提供商:有没有办法检查位置更新是否失败?

Ers*_*man 14 java android google-maps fusedlocationproviderapi

介绍

在我的应用程序中,我希望获得用户当前所在位置的一次性准确位置.当我FusedLocationProviderApi.getLastLocation有时使用时,这将是null或过时的位置,因为我发现这只是一个缓存的位置,并没有请求新的位置更新.

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

 LocationRequest locationRequest  = LocationRequest.create()
                .setNumUpdates(1)
                .setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY)
                .setInterval(0);

        LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient,locationRequest,this)
Run Code Online (Sandbox Code Playgroud)

现在我总是得到一个更准确的位置.

我的问题

如何确定位置更新是否失败?因为我只要求1.

获取位置更新时,将调用此回调

 @Override
 public void onLocationChanged(Location location) {

 }
Run Code Online (Sandbox Code Playgroud)

但是,如果位置更新失败,则不会调用此方法.

我试过了什么

我看到有一个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);
            }
        });
Run Code Online (Sandbox Code Playgroud)

其他

运用 com.google.android.gms:play-services-location:8.4.0

感谢您的阅读,请帮帮我.

Ers*_*man 30

在进一步挖掘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);
Run Code Online (Sandbox Code Playgroud)

而不是使用LocationListener.我用了LocationCallback

onLocationResult仅被调用以提供基于的最新位置结果LocationRequest.如果无法提供位置,则不会调用它.在我的测试期间,当位置被禁用且GPS在室内使用时不会被调用.请致电result.getLastLocation()获取实际的位置对象.

onLocationAvailablity总是被称为.locationAvailability.isLocationAvailable()如果设备位置已知且在活动LocationRequests请求的提示内合理更新,则返回true.如果无法确定位置可能来自多种原因(包括禁用的位置设置或无法在设备环境中检索传感器数据),则返回False.

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

其他人可以保证这个吗?

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

  • 您能告诉我您做了什么来删除所有现有位置历史记录(以防止缓存位置)吗? (2认同)