2014-01-23 43 views
1

我使用LocationClient来获得当前位置的每一分钟:定期使用LocationClient获取位置的最佳方式是什么?

mLocationRequest = LocationRequest.create(); 
mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY); 
mLocationRequest.setInterval(60000); 
mLocationRequest.setFastestInterval(60000); 
mLocationClient = new LocationClient(this, this, this); 
// ... when connected: 
mLocationClient.requestLocationUpdates(mLocationRequest, this); 

但是我发现我的LocationListener的的onLocationChanged-方法被调用或者每60或120(或60任何其他倍数)秒(+/- 3秒)。该文档说:

此间隔是不精确的。您可能根本没有收到更新(如果没有可用的位置信息源),或者您可能收到的信息比请求的要慢。 [...]

所以我知道,间隔不是确切的一分钟。但我认为我会在60秒结束后尽快获得当前位置,例如75秒后。但似乎如果LocationClient无法确定位置,它会在接下来的60秒后重试。

这个假设是否正确?

如果是,解决方法是将时间间隔设置为30秒左右,并在onLocationChanged-method中过滤掉所需的位置。但是这可能会消耗更多的电池电量。

回答

2

当您拨打mLocationRequest.setFastestInterval(60000);时,您说您每60秒钟不能处理一个以上的呼叫,因此为什么它在发送更新前等待60秒的时间间隔(即使它在下一个60秒前45秒期间) - 降低setFastestInterval以确保位置更新在收到后立即发送给您。由于实际轮询频率与setInterval(而不是最快间隔)相关,因此增加setFastestInterval不应增加电池使用量。

+0

但降低setFastInterval可以导致我的onLocationChanged方法被调用的频率超过每60秒,这不是我想要的。 ;-)我想要的东西是:每60秒只调用一次onLocationChanged方法,但如果在60秒后没有位置,则在获得下一个坐标时尽快调用我的方法。 – Biggie

+1

今天我做了测试:降低FastInterval导致更稳定的60秒位置更新间隔。但是,如果在后台运行例如“My tracks”-app,并且间隔非常短,则会导致我的应用程序的LocationListener以其FastInterval率(如预期的)进行调用。所以我必须再次过滤所需的位置以获得我的60秒间隔。所以解决方法似乎仍然是将Interval/FastInterval设置为低于想要的时间间隔(这是我的建议)。 – Biggie

相关问题