Android - LocationManager requestLocationUpdates - 位置更新不一致
Posted
技术标签:
【中文标题】Android - LocationManager requestLocationUpdates - 位置更新不一致【英文标题】:Android - LocationManager requestLocationUpdates - location updates not consistent 【发布时间】:2014-04-03 09:12:57 【问题描述】:我尝试每 10 分钟获取一次位置更新,但位置更新时间不一致。有时我会在 10 分钟后获得位置更新,有时我会在 2 小时后获得位置更新。应用在后台线程上获取位置更新。
代码如下:
_locationManager.requestLocationUpdates(
LocationManager.GPS_PROVIDER,
10 * 60 * 1000,
0,
_locationListener,
_gpsHandlerThread.getLooper());
我还尝试设置 minTime(10) 和 minDistance(10 米) 这两个值,但即使在 1-2 分钟后我也会收到更新。我不确定 minTime 和 minDistance 是否具有 OR 逻辑,即时间间隔是否为 10 分钟或用户已移动 10 米或具有逻辑。
我的要求是 - 如果用户距离上一个位置 10 米,则每 10 分钟获取一次用户位置。
我怎样才能做到这一点?我寻求帮助,但几乎没有解释它是如何工作的。
【问题讨论】:
如果您使用的是LocationManager.GPS_PROVIDER
,则可能需要长达 20 分钟才能从卫星上获得第一个修复 - 更不用说您需要清晰的天空视野,如果您正在室内的。另一方面,LocationManager.NETWORK_PROVIDER
可以在您的设备连接到无线网络后立即为您提供位置更新 - 缺点是这种方法不如您使用的 GPS 方法准确。
【参考方案1】:
使用这个处理程序来获取位置
private Handler customHandler = new Handler();
private Runnable updateTimerThread = new Runnable()
@Override
public void run()
try
Location myLocation = mGoogleMap.getMyLocation();
secndLocationListener.onLocationChanged(myLocation);
catch (Exception e)
Log.getStackTraceString(e);
;
叫这个
customHandler.postDelayed(updateTimerThread , 10 * 60 * 1000);
【讨论】:
【参考方案2】:最好的方法不是通过 requestLocationUpdates,而是通过使用计时器定期启动更新。这应该可以避免您不必要地耗尽电池。所以我最终做了这样的事情:
-
我有一些检查,看看我是否喜欢 GPS 值。
如果我对 GPS 感到满意,我会删除更新,并启动计时器以再次开始获取更新。
我总是在恢复应用程序时收到更新。
重新启动 GPS 更新的代码可能如下所示:
Timer mTimer;
private void sendFinalGps()
mLocationManager.removeUpdates(this);
mTimer = new Timer();
mTimer.schedule(new findGpsTime(), getTimeBetweenUpdates());
【讨论】:
以上是关于Android - LocationManager requestLocationUpdates - 位置更新不一致的主要内容,如果未能解决你的问题,请参考以下文章
Android - 使用 LocationManager 不会提供地理修复
Android:LocationManager 构造函数的循环器