当app在后台并注册位置更新时,方法didUpdateHeading
是否被调用?
答案 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+)上运行位置更新,
NSLocationAlwaysUsageDescription
self.locationManager.allowsBackgroundLocationUpdates = YES;
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];