我正在使用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()获取状态更改,这些似乎工作正常。
由于
答案 0 :(得分:1)
根据文件
此间隔不准确。您可能根本没有收到更新(如果没有可用的位置源),或者您可能会收到比请求更慢的更新。
您可以尝试使用public LocationRequest setFastestInterval (long millis)
。文档说明:
您可以使用setFastestInterval(long)控制您将获得更新的最快速率。默认情况下,此最快速率是间隔频率的6倍。
另请确保您请求ACCESS_FINE_LOCATION
。文档还指出:
仅具有粗略位置权限的应用程序可能会以静默方式限制其间隔
答案 1 :(得分:0)
正如“LocationRequest.setInterval()”文档所说
位置客户端将主动尝试以此间隔获取您应用的位置更新[...]
因此,您可能无法以所需频率更新位置。这是因为位置检索技术(GPS,WiFi等)的性质以及它非常依赖于硬件(以及Google的融合位置提供程序算法),并且还取决于大气条件(在GPS情况下)。如果您想获得高精度的位置,那么设备需要首先获得一些样本才能进行高精度估计。