在ios 6和ios 9之间的CLLocation后台服务启用变化

我有一个在iOS 7上发布的实时应用程序,并使用后台服务。 我正在重新编译ios 9下的应用程序,现在发现应用程序在进入后台时没有收到任何位置更新。

我做了以下更改:

  1. 我已经将下面的关键字添加到了我的info.plist文件中,并附带了string值:NSLocationWhenInUseUsageDescription

仍然当应用程序在后台,它停止接收位置更新。 有没有其他的设置或方法,我应该包括哪些将允许应用程序接收位置更新在后台像现场应用程序?

希望这可以帮助你:

确保您已selectfunction位置更新。 在这里输入图像说明 同时在应用程序委托中检查backgroundMode

- (void)applicationDidEnterBackground:(UIApplication *)application { self.bgTask = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{ NSLog(@"ending background task"); [[UIApplication sharedApplication] endBackgroundTask:self.bgTask]; self.bgTask = UIBackgroundTaskInvalid; }]; //You can use timer selected time intervals } 

WWDC会议“核心位置新增function”解释了这一新的属性。

如果您链接到iOS 9,则默认值为NO。

如果您的应用程序在后台使用位置(不显示蓝色状态栏),则除了在Info.plist中设置背景模式function之外,还必须将allowBackgroundLocationUpdates设置为YES。 否则位置更新只能在前台传送。 好处是您现在可以让位置pipe理员在后台位置更新和其他位置pipe理器在同一个应用程序只有前景位置更新。 您也可以将该值重置为NO以更改行为。

文档很清楚:

默认情况下,对于与iOS 9.0或更高版本链接的应用程序,这是NO,无论最低部署目标如何。 将UIBackgroundModes设置为包含Info.plist中的“位置”时,只要调用-startUpdatingLocation以在后台继续,就必须在运行时将此属性设置为YES。 UIBackgroundModes不包含“位置”时,将此属性设置为YES是一个致命错误。 将此属性重置为NO相当于从UIBackgroundMode值中省略“位置”。 只要应用程序正在运行(即未挂起),并且具有足够的授权(即具有WhenInse授权并且正在使用,或者始终授权),仍然允许访问位置。 但是,应用程序仍然会受到通常的任务暂停规则的限制。 有关可能的授权值的更多详细信息,请参阅-requestWhenInUseAuthorization和-requestAlwaysAuthorization。

这个答案的参考 – 在iOS9的CLLocationManager的allowBackgroundLocationUpdates

Googlesearch – https://www.google.co.in/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=location+update+in+ios+9+in+background