Android onLocationChanged仅在最快

时间:2016-06-28 18:08:31

标签: android location

我正在使用FusedLocationApi来获取更新。但是,尽管将LocationRequest.setInterval设置为500或甚至200毫秒,我每秒只能获得一次更新。如果可能的话,我想得到两秒钟(做移动平均速度)。有硬限制吗?

在我的onCreate for the Activity中:

googleApiClient = new GoogleApiClient.Builder(this)
                .addConnectionCallbacks(this)
                .addOnConnectionFailedListener(this)
                .addApi(LocationServices.API)
                .addApi(AppIndex.API).build();

在我的'onConnected'方法中:

this.locationRequest = new LocationRequest();
this.locationRequest.setInterval(200);
this.locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
LocationServices.FusedLocationApi.requestLocationUpdates(this.googleApiClient, this.locationRequest, this);

我还有一个单独的LocationManager我只用于通过addGpsStatusListener()获取状态更改,这些似乎工作正常。

由于

2 个答案:

答案 0 :(得分:1)

根据文件

  

此间隔不准确。您可能根本没有收到更新(如果没有可用的位置源),或者您可能会收到比请求更慢的更新。

您可以尝试使用public LocationRequest setFastestInterval (long millis)。文档说明:

  

您可以使用setFastestInterval(long)控制您将获得更新的最快速率。默认情况下,此最快速率是间隔频率的6倍。

另请确保您请求ACCESS_FINE_LOCATION。文档还指出:

  

仅具有粗略位置权限的应用程序可能会以静默方式限制其间隔

答案 1 :(得分:0)

正如“LocationRequest.setInterval()”文档所说

  

位置客户端将主动尝试以此间隔获取您应用的位置更新[...]

因此,您可能无法以所需频率更新位置。这是因为位置检索技术(GPS,WiFi等)的性质以及它非常依赖于硬件(以及Google的融合位置提供程序算法),并且还取决于大气条件(在GPS情况下)。如果您想获得高精度的位置,那么设备需要首先获得一些样本才能进行高精度估计。