如何在ios中连续在后台运行位置更新

时间:2014-04-04 06:45:51

标签: ios iphone objective-c ios7 ios7.1

UIApplication*    app = [UIApplication sharedApplication];

_backgroundTask = [app beginBackgroundTaskWithExpirationHandler:^{
    [app endBackgroundTask:_backgroundTask];
    _backgroundTask = UIBackgroundTaskInvalid;
}];

 [self startTimer];

NSLog(@"backgroundTimeRemaining: %.0f", [[UIApplication sharedApplication] backgroundTimeRemaining]);

-(void)startTimer
{
    self.updateTimer = [NSTimer scheduledTimerWithTimeInterval:60.0
                                                        target:self
                                                      selector:@selector(repeatedMethod)
                                                      userInfo:nil
                                                       repeats:YES];
}

当我的应用程序处于前台时,我能够成功运行,但是当我来到后台时,如果 backgroundTimeRemaining:10它正在运行3分钟,但backgroundTimeRemaining:176时 它一直在运行。有一点我不明白为什么backgroundTimeRemaining显示不同的数字。如何在后台继续运行流程。我需要提到的一件事是我的后台进程包含位置更新。我对ios很新。任何帮助都会很明显。

3 个答案:

答案 0 :(得分:0)

您需要在应用的info.plist文件中设置以下键值

所需的后台模式:应用程序注册位置更新!

如下图所示,并在AppDelegate中实现位置管理器委托方法,以便它的应用程序位于任何视图控制器中。

在info.plist中设置上述键值将告诉ios为位置服务启用后台模式。

答案 1 :(得分:0)

阅读"在后台获取位置事件(仅限iOS)"在:

https://developer.apple.com/library/ios/documentation/userexperience/conceptual/LocationAwarenessPG/CoreLocation/CoreLocation.html#//apple_ref/doc/uid/TP40009497-CH2-SW10

基本上,您的应用需要请求获得此背景模式的权限,并使用位置API而不是时间。您将进行一些设置(获取默认位置管理器,设置委托),调用" startUpdatingLocation"从CLLocationManager类开始,然后定期回调新位置。

请注意,如果您这样做,您将非常快地耗尽用户的手机电池,Apple会拒绝您在App Store中的应用,除非您提供免责声明。

答案 2 :(得分:0)

CLLocationManager pausesLocationUpdatesAutomatically设置为NO。它可能对你有帮助。

有关详细信息,请查看Apple's Location manger documentation