在ios 6和ios 9之间更改CLLocation后台服务

时间:2015-12-22 09:47:22

标签: ios cllocation

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

我做了以下更改:

  1. 我已将以下密钥添加到我的info.plist文件中,附带一个字符串值:NSLocationWhenInUseUsageDescription
  2. 当应用程序进入后台时,它仍然停止接收位置更新。 我应该包含哪些其他设置或方法,允许应用程序在后台接收位置更新,就像实时应用程序一样?

3 个答案:

答案 0 :(得分:0)

希望这可以帮助你:

确保您已在功能中选择了位置更新 。 enter image description here 还要检查应用程序中的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

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

答案 2 :(得分:0)