如何在后台继续在iOS上运行位置更新

问题描述:

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很陌生。任何帮助将是可观的。如何在后台继续在iOS上运行位置更新

你需要设置下面的键值在你的应用程序的Info.plist文件

所需的背景模式:应用程序注册了位置更新!

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

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

+0

我已经在info.plist中添加了位置更新所需的背景模式。我正在viewcontroller中进行位置更新。并且我正在使用定时器调用appdelegate(repeatedMethod)中的该方法。 – user3496682

阅读“在后台获取位置活动(仅适用于iOS)”中:

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

基本上您的应用需要请求允许有这样的背景模式,并使用位置API,而比一次。你会做一些设置(获取默认位置管理器,设置委托),从CLLocationManager类调用“startUpdatingLocation”,然后定期回调新的位置。

请记住,如果你这样做,你会很快耗尽用户的手机电池,并且Apple会从App Store中拒绝你的应用程序,除非你对此作出了免责声明。

+0

我想知道为什么backgroundTimeRemaining在不同的时间显示不同的数字。此外,我已经在一个viewcontroller中实现了CLLocationManager类,并且每60秒钟在nstimer的appdelegate中执行clling。是对的吗。 – user3496682

+0

你不需要计时器。如果您正确设置了位置管理器委托,那么它(系统的位置管理器)会在位置发生一定距离(您可以指定)变化时调用您。 – RobP

+0

和iOS对于您将获得backgroundTimeRemaining的内容几乎没有保证 - 它可能取决于您的控制之外的其他应用程序,电池续航时间或iOS未来版本中的任何其他应用程序的活动数量。但是,这对于获取后台位置更新的目的并不重要 – RobP

将您的CLLocationManagerpausesLocationUpdatesAutomatically设置为NO。它可能会帮助你。

欲了解更多信息,请查询Apple's Location manger documentation

+0

请告诉我什么是使用backgroundTimeRemaining – user3496682

+0

检查这[文档](https://developer.apple.com/library/ios/documentation/uikit/reference/UIApplication_Class/Reference/Reference。HTML#// apple_ref/OCC/instp/UIApplication的/ backgroundTimeRemaining) –