2

我搜索了很多天的解决方案,但我没有找到任何让我满意的解决方案。

我已经启动了LocationManager,并且工作正常。现在,我想连接LocationManager一个时间表。例如,在上午 9 点到下午 1 点之间,位置管理器应该工作,在下午 1 点到下午 3 点之后应该关闭,然后到午夜位置管理器必须打开。

当应用程序暂停并关闭时,如何触发操作LocationManager

我写了这样的东西:

[NSTimer scheduledTimerWithTimeInterval:30 target:self selector:@selector(doInBackground:) userInfo:nil repeats:YES];

- (void) doInBackground:(NSTimer*)time {
    ScheduleModel *schMod = [[ScheduleModel alloc]init];
    if(![schMod isScheduleActiveNow]){
        [locationManager stopUpdatingLocation];
        NSLog(@"LocationManager OFF");
    } else if(!locationManager){
        [locationManager startUpdatingLocation];
        NSLog(@"LocationManager ON");
    }
    [schMod release];
}

但它只有在工作时才LocationManager有效。当我LocationManager关闭时,似乎没有什么可以触发 action doInBackground

有没有解决这个问题的方法?

4

2 回答 2

0

为了实现这样的功能,您必须注意有关 ios 应用程序状态及其多任务处理能力的一些要点。第一件事是即使应用程序没有运行,您也需要注册应用程序以获取位置更新。通过显着的位置更改属性,您可以跟踪与应用程序状态无关的位置。另一件事是您需要在特定时间间隔内更新位置。我认为可以通过触发本地通知服务来实现。

于 2013-04-29T12:58:17.857 回答
0

当应用程序暂停时,如果您没有注册后台位置服务并启动位置管理器实例更新,则无法通过计时器让应用程序再次开始更新。您的选择是:

  1. 让位置管理器保持更新,但仅在您打算激活的时间响应事件。
  2. 仅在进入后台状态时更改为重要的位置更改更新。该应用程序将在位置发生重大变化时唤醒,然后您可以检查时间并根据需要通过开始持续更新来做出响应。
  3. 设置一个受监控的区域,在退出该区域时唤醒并做出相应的响应。

在后台持续更新,如果不是必需的,也不是对用户电池的负责任的处置。如果你解释更多你想要完成的事情,我可能会有更好的建议。

您可以在 github 上的处理程序中看到我在后台状态下所做的一些工作:

TTLLocationHandler

于 2012-10-16T13:17:30.783 回答