2016-10-30 6 views
0

私のアプリは位置情報と加速度計の情報を収集し、ユーザーが要求した場合はバックグラウンドで引き続き行います。加速度計情報は約100Hzで収集され、高速で収集することが重要です。アプリは古いバージョンの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の下で動き情報をバックグラウンドで継続する方法はありますか?

+0

を、私はアップルにバグレポートを提出することをお勧め。 iOS 10では、センサーのバックグラウンド使用に関するいくつかの変わった変更が行われています。とにかく前に働いていたら、正当なユースケースがあります。 – matt

答えて

0

iOS 9以降、ロケーションイベントのバックグラウンド処理を有効にするために新しい呼び出しが必要です。バックグラウンド処理のオン/オフを切り替えることができますが、デフォルトではオフになっていますので、iOS 8以前のコードでバックグラウンド処理を復元するには手動で設定する必要があります。バックグラウンド処理を可能にするために、ロケーションマネージャを設定するとき

は、この行を追加します。

locationManager.allowsBackgroundLocationUpdates = YES; 
関連する問題