我正在使用Android LocationManager
及其方法requestLocationUpdates
,如下所示:
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 3000, 10, this);
我发现位置更新必须满足minTime和minDistance的条件,但我需要每隔3秒或10米更新一次。
我试图像这样提出2个请求:
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 3000, 0, this);
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 10, this);
但它不起作用,我只用这段代码每10米更新一次,而不是每3秒钟一次。
如果重要的话,我正在使用API19。
答案 0 :(得分:4)
requestLocationUpdate()上的文档说:
requestLocationUpdates(String provider,long minTime,float minDistance,LocationListener监听器)
使用指定的提供程序注册位置更新,并注册待处理的意图。
所以你应该像locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 3000, 10, this);
但是如果你将minTime设置为0,它会在第一次收到位置更新时被调用一次,然后在你更改minDistance米中的位置之前不会被调用。
Documentation Link for Reference
修改强>
根据与@Matej 的讨论,我需要每隔10米更新一次,即使它发生在不到3秒内,并且每3秒更新一次,即使位置变化不超过10米< / em>的
如果您想定期requestLocationUpdates
,则应使用Timer
和TimerTask
并让requestLocationUpdates
每3秒运行一次
计划(TimerTask任务,长延迟,长期)
为重复的固定延迟执行安排指定的任务, 在指定的延迟后开始。
答案 1 :(得分:0)
我为类似的问题阅读了此讨论。 我必须每秒更新一次位置,但设置:
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000, 0, this);
我没有达到我的目标。 在我读到的官方文档中,如果您修复更新的时间速率,它也不会像设置的那样严格。 (我再也找不到谈论的开发人员页面了)。
为了有一个固定且确定的更新时间,我找到了这篇文章。
我的问题是位置更新去更新(由观察者)活动,我在使用计时器时出错(如建议的那样)。 错误是:
Only the original thread that created a view hierarchy can touch its views.
对于任何有类似问题的人,我建议使用 Handler:
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
notifyLocationObservers();
}
}, 1000);