CWAC。 locpoll如何停止正在运行的位置更新?

时间:2012-08-21 19:44:06

标签: commonsware-cwac

我将OMGStop()方法修改为更像这样的东西:

public void cancelUpdates() {
    //TODO potential bug here
    if(pi == null)
        setPendingIntent();
    mgr.cancel(pi);     

    //Should one of these work?
    stopService(new Intent(applicationContext, LocationPoller.class));
    stopService(new Intent(applicationContext, LocationPollerService.class));

我将pi(PendingIntent)存储为我的活动类中的成员。这可以很好地从AlarmManager中删除PendingIntent。

...然而

如果有正在进行的话,我希望能够停止当前的位置调查。你现在的设计有可能吗?我以为我可以停止服务,但GPS继续运行。

基本上我正在尝试做的是当用户(我旅行中)更改首选项(例如超时,或使用GPS或更新周期)时停止所有内容。然后使用新值重新创建所有内容。

谢谢,

伟大的代码BTW - 正是我想跟踪我的越野之旅:)

2 个答案:

答案 0 :(得分:2)

我遇到了同样的问题。 - 有时我让我的鼠标指针悬停在“mgr.setRepeating(..)”上并阅读Eclipse的一些(Indigo)提示: “如果已经为同一个IntentSender安排了警报,它将首先被取消。” 但那时IntentSender可能会消失。 这使我得到了以下“解决方案”(原始CommonsWare代码):

if(pi == null) {
  Intent i = new Intent(this, LocationPoller.class);
  pi = PendingIntent.getBroadcast(this, 0, i, 0);
  mgr.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,
    SystemClock.elapsedRealtime() + 1000, PERIOD, pi);
}
mgr.cancel();

通过添加1000毫秒,我试图确保AlarmManager在被cancel()命中之前没有机会启动。

HTH,问候。

PS:我想引用mparkes:“伟大的代码”!

答案 1 :(得分:0)

  

您目前的设计是否可行?

不,抱歉。这在理论上可以添加,但可能有点棘手,而且目前肯定不存在。

  

基本上我正在尝试做的是当用户(我旅行中)更改首选项(例如超时,或使用GPS或更新周期)时停止所有内容。然后使用新值重新创建所有内容。

这是一个非常合理的概念,而不是LocationPoller支持的概念。 LocationPoller的设计更多是针对“每小时检查”的各种情况,在用户碰巧正在操作应用的UI时,统计上不太可能进行检查。