我在ios 7上发布了一个Live App并使用后台服务。 我正在重新编译ios 9下的应用程序,现在发现应用程序在进入后台时没有收到任何位置更新。
我做了以下更改:
当应用程序进入后台时,它仍然停止接收位置更新。 我应该包含哪些其他设置或方法,允许应用程序在后台接收位置更新,就像实时应用程序一样?
答案 0 :(得分:0)
希望这可以帮助你:
确保您已在功能中选择了位置更新 。 还要检查应用程序中的app delegate中的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
}
答案 1 :(得分:0)
WWDC会议“核心位置有什么新内容”解释了这个新属性。
如果您链接iOS 9,则默认值为NO。
如果您的应用在后台使用位置(不显示蓝色状态栏),除了在Info.plist中设置背景模式功能外,您还必须将allowsBackgroundLocationUpdates设置为YES。否则,位置更新仅在前台传递。优点是您现在可以让位置管理器具有后台位置更新,而其他位置管理器只能在同一个应用程序中进行前景位置更新。您也可以将值重置为NO以更改行为。
文档很清楚:
默认情况下,对于针对iOS 9.0或更高版本链接的应用程序,这是“否”,无论最低部署目标如何。 将UIBackgroundModes设置为在Info.plist中包含“location”时,您还必须在运行时将此属性设置为YES,以便在后台继续调用-startUpdatingLocation。 当UIBackgroundModes不包含“location”时将此属性设置为YES是致命错误。 将此属性重置为NO等同于从UIBackgroundModes值中省略“location”。只要应用程序正在运行(即未暂停),并且具有足够的授权(即,它具有WhenInUse授权并且正在使用,或者它具有始终授权),仍然允许访问位置。但是,该应用程序仍将遵循通常的任务暂停规则。 有关可能的授权值的详细信息,请参阅-requestWhenInUseAuthorization和-requestAlwaysAuthorization。
此答案的参考 - allowsBackgroundLocationUpdates in CLLocationManager in iOS9
答案 2 :(得分:0)