Android LocationListener.onLocationChanged() - 如果时间过去则触发,但位置不是?

时间:2011-04-02 11:06:49

标签: android

我正在为Android编写一些跟踪应用程序,并希望使用onLocationChanged()方法来接收更新。

现在我想偶尔接收更新,即使位置本身没有改变,所以我知道跟踪设备仍处于活动状态等。

似乎onLocationChanged只会在实际坐标发生变化时被触发,单靠时间戳是不够的。

我通过每隔x秒轮询一次LocationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER)并且不使用onLocationChanged来解决这个问题。

我担心,这不是最有效的方法。

我可以想象一些机制会在车辆移动时每30秒发送一次更新,如果不是,则每10分钟发送一次(获得一些心跳)。

有什么想法吗?

谢谢!

2 个答案:

答案 0 :(得分:1)

只需要一个休眠10分钟但在locationListener触发位置更改时中断的线程。当线程唤醒时,就会发生这种情况。

所以有一个包含这样的方法的线程

void myUpdateMethod() {
 while (!shutdown) {
  try {
   Thread.sleep(1000 * 60 * 10);
  } catch (InterruptedException e) { }
  .. do update stuff here
 } 
}

你的听众会是这样的

onLocationChanged(Location location) {
 otherThread.interrupt();
}

现在您可以保证至少每10分钟获得一次更新,或者如果收到更新,则更快。虽然这里需要注意的是你不能单独使用中断来关闭其他线程。

答案 1 :(得分:0)

您可以在注册位置侦听器方法时设置时间间隔和最小更新距离。所以只需将0改为距离变化。