我的應用程序收集位置和加速度計信息,並且如果用戶請求它,它將在後臺繼續執行此操作。加速度計信息以大約100 Hz的速度收集,並且以高速率收集它至關重要。該應用在iOS版本較舊的版本下運行良好,但在iOS 10下失敗。我正在尋找一種方法在後臺繼續收集加速度計信息。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和以前,運動信息被記錄在100Hz附近,沒有問題的速率,但iOS的10下,運動信息,只要該應用程序進入背景停止。
有什麼辦法讓運動信息在iOS 10下的背景中繼續?
我建議提交與蘋果的bug報告。 iOS 10對傳感器的背景使用做出了一些奇怪的改變,這可能就是其中之一。而且,無論如何,如果它在以前工作,你就有合理的用例。 – matt