当前位置: 首页 > 面试题库 >

融合的位置提供者:是否可以检查位置更新是否失败?

呼延俊良
2023-03-14
问题内容

介绍

在我的应用中,我想一次性获得用户当前所在位置的准确位置。当我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()如果设备位置是已知的,并且在活动LocationRequests请求的提示中合理地是最新的,则返回true。如果无法确定位置的原因可能是多种原因,则返回False,包括位置设置无效或无法在设备环境中检索传感器数据。

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

其他人可以担保吗?

注意:该requestLocationUpdates调用的最后一个参数是循环程序。传递null意味着它将使用调用html" target="_blank">线程的消息队列。



 类似资料:
  • 如何检查字节中的某个位是否被设置?

  • 我正在检查移动设备上是否启用了位置服务,如果是,请监听构建GoogleAppClient并监听位置更改。我面临的问题是,一旦在mobile中打开位置并重新启用,我就无法获得位置(纬度/长)。位置始终为空。 isLocationEnabled检查位置是否已打开

  • 我在MainActivity类中有一个提供纬度和经度值的融合位置提供程序代码,它使用persistableBundle传递给JobService类。当用户使用应用程序时,它工作正常(即应用程序位于前台)。一旦应用程序被刷出或销毁,MainActivity的最后更新值就会一直通过作业调度器重复上传(即,作业调度器始终获得相同的值,融合的位置提供程序不工作)。即使应用程序不在前台,我应该怎么做才能使其

  • 我一直在尝试获取我当前的位置更新,并按照Google的建议使用了融合位置提供商,但我无法获得任何更新。我在网上彻底搜索了,但找不到任何解决方案。融合提供商返回的位置甚至不接近我所在的位置,它显示了其他一些国家。有人能在这里帮我吗?

  • 这就是我如何注册我的应用程序来接收位置更新: 我悬而未决的意图几乎在所要求的时间间隔内被后台调用... 到目前为止还好。 问题:当WIFI被禁用/没有连接到任何网络,或者当没有3G/4G网络数据启用-融合位置提供商没有提供新的位置更新!! 我的位置访问设置打开,并检查GPS卫星和WI-FI和移动网络位置。 更大的问题是:有时在这种情况下,我确实通过挂起的意图接收位置更新回调,但它知道最后的位置(即

  • 我想知道位置是否在我的半径范围内。例如,我有我当前位置的“latlng”物体和我有一个更多的“latlng”物体,我想检查这两个物体是否在1km范围内?我该如何实现呢?