在后台推迟位置更新

时间:2014-03-28 21:42:00

标签: ios7 cllocationmanager

我有一个应用程序,它收集前景和背景中的位置数据。为了节省电池,我想使用allow Apple Doc中所述的allowDeferredLocationUpdatesUntilTraveled属性 从文档中,allowDeferredLocationUpdatesUntilTraveled在前台设置(基于时间和距离)。一旦应用程序进入后台,我们就不会收到定期的位置更新,而是根据allowDeferredLocationUpdatesUntilTraveled接收它们。

我已经实现了以下代码,但延迟不会在后台调用。

#pragma mark - Location Manager
-(void) setLocationManager
{
    locationManager = [[CLLocationManager alloc] init];
    locationManager.desiredAccuracy = kCLLocationAccuracyBest;
    locationManager.distanceFilter = kCLDistanceFilterNone;
    locationManager.delegate = self;
    [locationManager startUpdatingLocation];
}


-(void) locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations
{
     NSLog(@"didUpdateLocations");

     if (!deferringUpdates)
     {
         CLLocationDistance distance = 200;
         NSTimeInterval time = 60;

         [locationManager allowDeferredLocationUpdatesUntilTraveled:distance timeout:time];

          deferringUpdates = YES;
      }
}

-(void)locationManager:(CLLocationManager *)manager didFinishDeferredUpdatesWithError:(NSError *)error

{
    NSLog(@"didFinishDeferredUpdatesWithError");

}

SetLocationManager在前台调用并正常工作。一旦应用程序进入后台,我仍然会收到常规的位置更新,而不是allowDeferredLocationUpdatesUntilTraveled。

我还在info.plist文件中设置了以下值 背景提取 后台位置更新 设备功能 - 位置服务

实施此任何人都有好运吗?

1 个答案:

答案 0 :(得分:1)

你需要在didFinishDeferredUpdatesWithError中将deferringUpdates设置回NO:根据Apple文档,每次调用时,“委托的locationManager:didFinishDeferredUpdatesWithError:方法被称为一次”(allowDeferredLocationUpdatesUntilTraveled)。

因此,只有在deferringUpdates为NO时才调用allowDeferredLocationUpdatesUntilTraveled。