我正在为Android编写一些跟踪应用程序,并希望使用onLocationChanged()方法来接收更新。
现在我想偶尔接收更新,即使位置本身没有改变,所以我知道跟踪设备仍处于活动状态等。
似乎onLocationChanged只会在实际坐标发生变化时被触发,单靠时间戳是不够的。
我通过每隔x秒轮询一次LocationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER)并且不使用onLocationChanged来解决这个问题。
我担心,这不是最有效的方法。
我可以想象一些机制会在车辆移动时每30秒发送一次更新,如果不是,则每10分钟发送一次(获得一些心跳)。
有什么想法吗?
谢谢!
答案 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改为距离变化。