Android LocationListener.onLocationChanged()--如果时间过去了会触发,但位置没有?

Android LocationListener.onLocationChanged()--如果时间过去了会触发,但位置没有?,android,Android,目前我正在为android编写一些跟踪应用程序,并希望使用onLocationChanged()方法接收更新 现在我想每隔一段时间接收一次更新,即使位置本身没有改变,所以我知道跟踪设备仍然活着等等 似乎只有在实际坐标发生变化时才会触发onLocationChanged,仅时间戳是不够的 我通过每隔x秒轮询LocationManager.getLastKnownLocation(LocationManager.GPS\U PROVIDER)而不是使用onLocationChanged解决了这个问题

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

现在我想每隔一段时间接收一次更新,即使位置本身没有改变,所以我知道跟踪设备仍然活着等等

似乎只有在实际坐标发生变化时才会触发onLocationChanged,仅时间戳是不够的

我通过每隔x秒轮询LocationManager.getLastKnownLocation(LocationManager.GPS\U PROVIDER)而不是使用onLocationChanged解决了这个问题

不过,恐怕这不是最有效的方法

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

有什么想法吗


谢谢

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

只需有一个线程,该线程睡眠10分钟,但在locationListener触发位置更改时被中断。当线程被唤醒时,它会做一些事情

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

void myUpdateMethod() {
 while (!shutdown) {
  try {
   Thread.sleep(1000 * 60 * 10);
  } catch (InterruptedException e) { }
  .. do update stuff here
 } 
}
onLocationChanged(Location location) {
 otherThread.interrupt();
}
你的听众会是这样的

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

现在,您可以保证至少每10分钟获得一次更新,或者如果收到更新,则更快。尽管这里的警告是,您不能单独使用中断来关闭另一个线程。

您确定这一点吗?我对onLocationChanged的经验是,无论坐标是否改变,它都会以固定的间隔被调用。我的HTC Desire可以做到这一点,但它可能依赖于设备。对不起,伙计们,我的代码以前肯定有其他问题,如果距离设置为0,即使它不移动,我也确实会得到更新,谢谢提示!