当应用程序在后台调用方法didUpdateHeading吗?

时间:2014-05-14 12:33:04

标签: ios cllocationmanager

当app在后台并注册位置更新时,方法didUpdateHeading是否被调用?

3 个答案:

答案 0 :(得分:1)

如果您还打开了位置更新,则会提供标题更新。例如,您可以这样做:

self.locationManager = [[CLLocationManager alloc] init];
self.locationManager.delegate = self;
[self.locationManager startUpdatingLocation];
[self.locationManager startUpdatingHeading];
return YES;

当然,这将令人难以置信地增加功耗。因此,您可以调低位置管理器的distanceFilter和准确度,如下所示:

self.locationManager.distanceFilter = 3000;
self.locationManager.desiredAccuracy = 3000;

这样可以提高功耗,因为您只需要提供标题更新。

我还尝试使用startMonitoringForSignificantLocationChanges,但是当应用程序处于后台时它不起作用。

编辑:不要忘记将pausesLocationUpdatesAutomatically设置为NO。这将阻止您在大约10分钟后停止工作。

答案 1 :(得分:0)

如果您的应用已注册为在后台使用位置服务,则会调用startUpdatingHeading,然后是

答案 2 :(得分:0)

要在后台(iOS 8.0+)上运行位置更新,

  1. 在info.plist上设置NSLocationAlwaysUsageDescription
  2. 设置self.locationManager.allowsBackgroundLocationUpdates = YES;
  3. 设置背景模式如图所示

  4. enter image description here


    然后开始更新。示例代码如下:

    self.locationManager = [CLLocationManager new];
    self.locationManager.delegate = self;
    self.locationManager.allowsBackgroundLocationUpdates = YES;
    
    if ([self.locationManager respondsToSelector:@selector(requestAlwaysAuthorization)]) {
        [self.locationManager requestAlwaysAuthorization];
    }
    
    [self.locationManager startUpdatingLocation];
    [self.locationManager startUpdatingHeading];