2016-10-30 4 views
0

내 앱은 위치 및 가속도계 정보를 수집하고 사용자가 요청하면 계속해서 백그라운드에서 가속계 정보를 수집합니다. 가속도계 정보는 약 100Hz에서 수집되며 고속으로 수집하는 것이 중요합니다. 앱은 이전 버전의 iOS에서는 제대로 작동했지만 iOS 10에서는 실패했습니다. 백그라운드에서 가속도계 정보를 계속 수집 할 방법을 찾고 있습니다.iOS에서 백그라운드에서 위치 및 가속도계 업데이트

사용 된 방법은 Receive accelerometer updates in background using CoreMotion framework의 그것과 유사합니다. 위치 업데이트 체크,

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>>> 
            } 
]; 

대상, 기능, 배경 모드 :

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; 
} 

내가 모션 관리자를 시작 나는 위치 관리자를 시작 .

iOS 9 이전 버전에서는 동작 정보가 약 100Hz의 속도로 문제없이 기록되지만 iOS 10에서는 앱이 배경에 들어가 자마자 동작 정보가 중지됩니다.

모션 정보를 iOS 10에서 백그라운드로 계속 유지할 수있는 방법이 있습니까?

+0

나는 애플과 버그 리포트를 제출하는 제안. iOS 10은 센서의 백그라운드 사용과 관련하여 다소 이상한 변화를 일으키며, 이는이 중 하나 일 수 있습니다. 그리고 이전에 작동했다면 어떤 경우에도 정당한 사용 사례가 있습니다. – matt

답변

0

iOS 9부터는 위치 이벤트의 백그라운드 처리를 활성화하는 데 새 호출이 필요합니다. 백그라운드 처리를 켜고 끄는 데 사용할 수 있지만 기본값은 off이므로 iOS 8 및 이전 코드에서 백그라운드 처리를 복원하려면 수동으로 설정해야합니다. 배경 처리를 할 수 있도록 위치 관리자를 설정할 때

이 줄을 추가

locationManager.allowsBackgroundLocationUpdates = YES; 
관련 문제