Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/93.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在ios中在后台连续运行位置更新_Ios_Iphone_Objective C_Ios7_Ios7.1 - Fatal编程技术网

如何在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];
}