アプリがバックグラウンドで実行されているとき、またはデバイスがスリープ モードになっているときに、アクセラレータの更新が必要です。一部のアプリはこれを行いますが、動作させることができませんでした。このために、appdelegate に CoreMotion プロパティがあり、applicationDidEnterBackground に呼び出します
-(void) startAccelerationUpdates
{
self.motionManager.deviceMotionUpdateInterval = 0.01;
[self.motionManager startDeviceMotionUpdatesToQueue:[NSOperationQueue mainQueue]
withHandler:^(CMDeviceMotion *motion, NSError *error){
dispatch_async(dispatch_get_main_queue(), ^{
NSLog(@"acceleration x %f", motion.userAcceleration.x);
NSLog(@"acceleration y %f", motion.userAcceleration.y);
NSLog(@"acceleration z %f", motion.userAcceleration.z);
}
);
}
];
}
アプリの plist で、必要なバックグラウンド モードを、位置情報の更新のためにアプリ レジスタに配置しました。デバイスをスリープ モードまたはバックグラウンドにすると、ログに更新が表示されません。アプリがアクティブになると、coremotion がログインを開始します。ヒントをくれた人はいますか?ありがとうございました。