LocationManager requestLocationUpdates minTime 或 minDistance
LocationManager requestLocationUpdates minTime OR minDistance
我正在使用 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。
关于 requestLocationUpdate() 的文档说:
requestLocationUpdates(String provider, long minTime, float
minDistance, LocationListener listener)
Register for location updates using the named provider, and a pending intent.
所以你应该这样称呼它 locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 3000, 10, this);
但是如果将 minTime 设置为 0,它将在第一次收到位置更新时调用一次,然后直到您更改 minDistance 米中的位置后才会调用它。
Documentation Link for Reference
编辑
根据与@Matej 的讨论我需要每 10 米更新一次,即使它发生在不到 3 秒内,并且每 3 秒更新一次,即使位置没有改变更多超过10米
如果你想定期requestLocationUpdates
,你应该使用Timer
和TimerTask
并且每3秒requestLocationUpdates
运行一次
schedule(TimerTask task, long delay, long period)
Schedules the specified task for repeated fixed-delay execution,
beginning after the specified delay.
我阅读了这个关于类似问题的讨论。
我必须每秒更新位置,但设置:
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000, 0, this);
我没有实现我的目标。
在官方文档中我读到,如果你为更新设置了一个时间率,它可能不会像设置的那样严格。 (我再也找不到谈论的开发者页面)。
为了获得固定且确定的更新时间,我发现了这个 post。
我的问题是位置更新去更新(由观察者) activity 并且我在使用 Timer 时出错(如建议的那样)。
错误是:
Only the original thread that created a view hierarchy can touch its views.
对于有类似问题的人,我建议使用处理程序:
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
notifyLocationObservers();
}
}, 1000);
我正在使用 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。
关于 requestLocationUpdate() 的文档说:
requestLocationUpdates(String provider, long minTime, float minDistance, LocationListener listener)
Register for location updates using the named provider, and a pending intent.
所以你应该这样称呼它 locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 3000, 10, this);
但是如果将 minTime 设置为 0,它将在第一次收到位置更新时调用一次,然后直到您更改 minDistance 米中的位置后才会调用它。
Documentation Link for Reference
编辑
根据与@Matej 的讨论我需要每 10 米更新一次,即使它发生在不到 3 秒内,并且每 3 秒更新一次,即使位置没有改变更多超过10米
如果你想定期requestLocationUpdates
,你应该使用Timer
和TimerTask
并且每3秒requestLocationUpdates
运行一次
schedule(TimerTask task, long delay, long period)
Schedules the specified task for repeated fixed-delay execution, beginning after the specified delay.
我阅读了这个关于类似问题的讨论。 我必须每秒更新位置,但设置:
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000, 0, this);
我没有实现我的目标。 在官方文档中我读到,如果你为更新设置了一个时间率,它可能不会像设置的那样严格。 (我再也找不到谈论的开发者页面)。
为了获得固定且确定的更新时间,我发现了这个 post。
我的问题是位置更新去更新(由观察者) activity 并且我在使用 Timer 时出错(如建议的那样)。 错误是:
Only the original thread that created a view hierarchy can touch its views.
对于有类似问题的人,我建议使用处理程序:
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
notifyLocationObservers();
}
}, 1000);