如何在后台继续在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启用位置服务的后台模式。
阅读“在后台获取位置活动(仅适用于iOS)”中:
基本上您的应用需要请求允许有这样的背景模式,并使用位置API,而比一次。你会做一些设置(获取默认位置管理器,设置委托),从CLLocationManager类调用“startUpdatingLocation”,然后定期回调新的位置。
请记住,如果你这样做,你会很快耗尽用户的手机电池,并且Apple会从App Store中拒绝你的应用程序,除非你对此作出了免责声明。
我想知道为什么backgroundTimeRemaining在不同的时间显示不同的数字。此外,我已经在一个viewcontroller中实现了CLLocationManager类,并且每60秒钟在nstimer的appdelegate中执行clling。是对的吗。 – user3496682
你不需要计时器。如果您正确设置了位置管理器委托,那么它(系统的位置管理器)会在位置发生一定距离(您可以指定)变化时调用您。 – RobP
和iOS对于您将获得backgroundTimeRemaining的内容几乎没有保证 - 它可能取决于您的控制之外的其他应用程序,电池续航时间或iOS未来版本中的任何其他应用程序的活动数量。但是,这对于获取后台位置更新的目的并不重要 – RobP
将您的CLLocationManager
的pausesLocationUpdatesAutomatically
设置为NO
。它可能会帮助你。
欲了解更多信息,请查询Apple's Location manger documentation。
请告诉我什么是使用backgroundTimeRemaining – user3496682
检查这[文档](https://developer.apple.com/library/ios/documentation/uikit/reference/UIApplication_Class/Reference/Reference。HTML#// apple_ref/OCC/instp/UIApplication的/ backgroundTimeRemaining) –
我已经在info.plist中添加了位置更新所需的背景模式。我正在viewcontroller中进行位置更新。并且我正在使用定时器调用appdelegate(repeatedMethod)中的该方法。 – user3496682