iOS 9推迟位置更新无法正常工作

时间:2015-09-15 11:42:18

标签: ios core-location ios9

您最近使用iOS 9 GM种子版本,我看到位置更新(allowDeferredLocationUpdatesUntilTraveled:timeout :)没有延迟。我收到错误kCLErrorDeferredFailed - 位置管理器由于未知原因未进入延迟模式。

由于此错误,它根本没有进入延迟模式,并且位置更新不断触发。 相同的代码曾经在iOS 8.4及以下版本中运行。它耗尽了我设备的电池百分比。 是否有任何我们需要为iOS 9明确设置或提及。没有找到Apple文档中的任何内容?

  -(void)locationManager:(CLLocationManager *)manager
didUpdateLocations:(NSArray *)locations {

  if (!self.deferringUpdates) {

  [self.locationManager allowDeferredLocationUpdatesUntilTraveled:CLLocationDistanceMax timeout:30];
   self.deferringUpdates = YES;
 } 
}

-(void)locationManager:(CLLocationManager *)manager
didFinishDeferredUpdatesWithError:(NSError *)error {
  // Stop deferring updates
  self.deferringUpdates = NO;

 }

我还设置了allowsBackgroundLocationUpdates属性,但即使这样也无济于事。

      self.locationManager.allowsBackgroundLocationUpdates=YES;

在iOS 9及更高版本中,无论部署目标如何,您还必须将位置管理器对象的allowsBackgroundLocationUpdates属性设置为YES,以便接收后台位置更新。默认情况下,此属性为NO,并且应该保持这种状态,直到您的应用主动要求更新后台位置为止。

Reduce Location Accuracy and Duration

请让我知道我还需要做些什么

由于

1 个答案:

答案 0 :(得分:0)

请阅读API参考页上的discussion

要提及的一些事项,如here

所述
  • 从多任务栏中取消所有应用
  • 确认没有其他应用使用位置服务
  • 从调试器和MacBook上拔下设备(通过将didUpdateLocations记录到文件来验证它是否仍在接听电话)
  • 确保设备支持延期更新
  • 确保distanceFilter为None,desiredAccuracy为Best