Android LocationManager正在使用-如果1分钟内没有修复,则需要停止

Android LocationManager正在使用-如果1分钟内没有修复,则需要停止,android,Android,我有定期服务,每5分钟使用一次闹钟。 服务实现LocationListener以获取GPS定位并将其保存到SqLite数据库中 我给服务一分钟,以得到最好的修复可能。如果我获得准确度请使用: 您可以使用和安排超时,如下所示 在服务中声明全局计时器对象引用: Timer timeout = null; 在onStartCommand()中,实例化此计时器并计划一分钟内执行一个TimerTask。从所需提供商注册位置更新后执行此操作: timeout = new Timer(); timeout.

我有定期服务,每5分钟使用一次闹钟。 服务实现LocationListener以获取GPS定位并将其保存到SqLite数据库中

我给服务一分钟,以得到最好的修复可能。如果我获得准确度请使用:


您可以使用和安排超时,如下所示

在服务中声明全局计时器对象引用:

Timer timeout = null;
在onStartCommand()中,实例化此计时器并计划一分钟内执行一个TimerTask。从所需提供商注册位置更新后执行此操作:

timeout = new Timer();
timeout.schedule(timeoutTask, 60000);
在服务类别中的某个位置定义超时任务,例如:

private TimerTask timeoutTask = new TimerTask() {
    public void run() {
        // Handle timeouts here
    }
}
如果在计时器过期之前通过onLocationChanged()获得回调,则需要停止执行timeoutTask,因此在onLocationChanged()中:

然后,只需像平常一样处理onLocationChanged()中的位置,或者调用另一个方法来完成,由您决定

也许有更好的方法可以做到这一点,但这很简单,并且在我的项目中对我起到了作用:)希望它也能帮助你

祝你一切顺利,
Declan

我把它放在我的类的onCreate中,我得到了一个错误:不是抽象的,并且不重写抽象方法run()inOops,这应该是
public void run()
,当然没有抽象。很抱歉顺便说一下,
Handler
使用当前线程的
MessageQueue
,而
Timer
创建一个单独的线程。您的里程可能会有所不同。谢谢!那更好用。。我刚被计时器咬了一口,它在不同的线程上运行。我在服务中有一些最终代码,只有在计时器上调用时才出现“looper”错误。很高兴我回头看了看——现在有道理了。
private TimerTask timeoutTask = new TimerTask() {
    public void run() {
        // Handle timeouts here
    }
}
if(timeout != null) {
    timeout.cancel()
}