如何在ios中在后台连续运行位置更新
当我的应用程序位于前台时,我能够成功运行,但当我进入后台时,如果如何在ios中在后台连续运行位置更新,ios,iphone,objective-c,ios7,ios7.1,Ios,Iphone,Objective C,Ios7,Ios7.1,当我的应用程序位于前台时,我能够成功运行,但当我进入后台时,如果 backgroundTimeRemaining:10正在运行3分钟,但backgroundTimeRemaining:176 它一直在运行。有一件事我不明白,为什么backgroundTimeRemaining显示不同的数字。如何在后台连续运行进程。我需要提到的一件事是,我的后台进程包含位置更新。我对ios很陌生。任何帮助都是值得的。您需要在应用程序的info.plist文件中设置以下键值 所需的后台模式:应用程序注册位置更新 如
backgroundTimeRemaining:10
正在运行3分钟,但backgroundTimeRemaining:176
它一直在运行。有一件事我不明白,为什么
backgroundTimeRemaining
显示不同的数字。如何在后台连续运行进程。我需要提到的一件事是,我的后台进程包含位置更新。我对ios很陌生。任何帮助都是值得的。您需要在应用程序的info.plist文件中设置以下键值
所需的后台模式:应用程序注册位置更新
如下图所示,在AppDelegate中实现location manager委托方法,以便在任何视图控制器中都可以看到应用程序
在info.plist中设置上述键值将告诉ios为定位服务启用后台模式。阅读以下内容中的“在后台获取位置事件(仅限ios)”:
基本上,你的应用程序需要请求许可才能使用后台模式,并使用位置API而不是时间API。您将进行一些设置(获取默认位置管理器,设置一个委托),从CLLocationManager类调用“startUpdatingLocation”,然后获取新位置的定期回调
请记住,如果您这样做,您会很快耗尽用户的手机电池电量,并且苹果将拒绝您的应用程序从应用商店中下载,除非您对此做出免责声明。将
CLLocationManager
的暂停位置自动更新
设置为NO
。这可能对你有帮助
查看更多信息。我已经在info.plist中添加了位置更新所需的后台模式。我正在viewcontroller中进行位置更新。我正在appdelegate中调用该方法(repeatedMethod)我正在使用计时器校准。我想知道为什么backgroundTimeRemaining在不同的时间显示不同的数字。此外,我在一个viewcontroller中实现了CLLocationManager类,并在nstimer中每隔60秒在appdelegate中实现一次clling。是吗?你不需要计时器。如果您正确设置了location manager委托,那么当位置发生一定距离的变化(您可以指定)时,它(系统的location manager)会给您打电话。而且iOS对您在BackgroundTime剩余时间内会得到什么几乎没有保证——这可能取决于您无法控制的其他应用程序的活动量,电池寿命,或iOS未来版本中的任何其他内容。但这对于获取后台位置更新来说并不重要,我明白你的意思。并且位置管理器代表可以在发现新位置时调用。但我的要求是,即使位置没有变化,也要每隔几秒钟获取一次位置更新。当你的应用程序位于后台时,你不能这样做。存储您得到的最后一个位置,如果您没有再次被呼叫,那么最后一个位置仍然是您所在的位置。请告诉我BackgroundTimeRemaining有什么用检查此项
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];
}