在iOS中挂起时启动locationManager

时间:2012-09-05 11:04:43

标签: iphone ios xcode locationmanager

我搜索了很多天的解决方案,但我没有发现任何令我满意的事情。

我已启动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时,似乎没有任何东西可以触发操作doInBackground

这个问题有解决方法吗?

2 个答案:

答案 0 :(得分:0)

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

  1. 保持位置管理器更新,但仅在您打算处于活动状态时响应事件。
  2. 仅在进入背景状态时更改为重要位置更改更新。应用程序将在重大位置更改时唤醒,然后您可以根据需要检查时间并通过启动连续更新进行响应。
  3. 设置受监控的区域,退出该区域后进行唤醒并做出相应的响应。
  4. 背景中的持续更新(如果不是必需的话)不是对用户电池的负责任处置。如果你解释了你想要完成的更多内容,我可能会有更好的建议。

    你可以在github上看到我在处理程序中以后台状态工作的一些内容:

    TTLocationHandler

答案 1 :(得分:0)

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