LocationManager requestLocationUpdates minTime或minDistance

时间:2017-11-01 12:22:16

标签: java android gps android-4.4-kitkat android-gps

我正在使用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秒钟一次。

如果重要的话,我正在使用API​​19。

2 个答案:

答案 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,则应使用TimerTimerTask并让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);