我的应用收集位置和加速度计信息,如果用户请求,则会在后台继续这样做。加速度计信息以大约100Hz的频率收集,并且以高速率收集它是至关重要的。该应用程序在旧版iOS下运行良好,但在iOS 10下失败。我正在寻找一种在后台继续收集加速度计信息的方法。
使用的方法类似于Receive accelerometer updates in background using CoreMotion framework中的方法。我启动了位置经理:
latitude = 0.0;
longitude = 0.0;
altitude = 0.0;
horizontalAccuracy = -1.0;
verticalAccuracy = -1.0;
if (locationManager == nil && [CLLocationManager locationServicesEnabled]) {
self.locationManager = [[CLLocationManager alloc] init];
CLAuthorizationStatus status = [CLLocationManager authorizationStatus];
if (status == kCLAuthorizationStatusNotDetermined) {
[locationManager requestWhenInUseAuthorization];
}
locationManager.delegate = self;
locationManager.desiredAccuracy = kCLLocationAccuracyBest;
locationManager.pausesLocationUpdatesAutomatically = NO;
[locationManager startUpdatingLocation];
}
我实现了locationManager:didUpdateLocations:
- (void) locationManager: (CLLocationManager *) manager didUpdateLocations: (NSArray *) locations {
printf("locationManager:didUpdateLocations:\n");
CLLocation *location = locations.lastObject;
latitude = location.coordinate.latitude;
longitude = location.coordinate.longitude;
altitude = location.altitude;
horizontalAccuracy = location.horizontalAccuracy;
verticalAccuracy = location.verticalAccuracy;
}
我启动了运动经理:
motionManager = [[CMMotionManager alloc] init];
motionManager.accelerometerUpdateInterval = 1.f/trialFrequency;
[[NSOperationQueue mainQueue] setMaxConcurrentOperationCount: 10];
[motionManager startAccelerometerUpdatesToQueue: [NSOperationQueue mainQueue]
withHandler: ^(CMAccelerometerData *accelerometerData, NSError *error) {
// Flag any error.
if (error) {
NSLog(@"error getting accelerometer update: %@", error);
}
<<<process data>>>
}
];
目标,功能,后台模式,位置更新已被检查。
在iOS 9和之前的版本中,运动信息以大约100 Hz的速率记录没有问题,但在iOS 10下,一旦应用程序进入后台,运动信息就会停止。
有没有办法让动作信息在iOS 10下在后台继续?
答案 0 :(得分:0)
从iOS 9开始,需要新的呼叫才能启用位置事件的后台处理。它可用于打开和关闭后台处理,但默认为关闭,因此必须手动设置它以恢复iOS 8和之前代码中的后台处理。
在设置位置管理器以允许后台处理时添加此行:
locationManager.allowsBackgroundLocationUpdates = YES;