モーションコプロセッサによる歩数取得の問題点
iPhoneは5sからモーションコプロセッサを搭載している。
要するに万歩計がiPhoneに内蔵されたのだ。
それ以前はアクセラロメータを使って歩数を取得していたので、リアルタイムに常に観測する必要があったためiPhoneのバッテリーが消費してしまう問題があった。
5s以降の機種では
CMPedometer#queryPedometerDataFromDate:(NSDate *)start toDate:(NSDate *)end withHandler:(CMPedometerHandler)handler
を呼び出せば歩数の履歴が秒単位で取得できるようになった。
データの保持期間は7日間だ。
いくつか問題がある。
1. Healthkitに保存されている歩数とCMPedometerに保存されている歩数が若干異なる値である。
多い日は多いし少ない日は少ないのだが値が同じではない。
healthKitからの歩数取得
HKHealthStore *healthStore = [HKHealthStore new];HKStatisticsCollectionQuery *query = [[HKStatisticsCollectionQuery alloc] initWithQuantityType:[HKObjectType quantityTypeForIdentifier:HKQuantityTypeIdentifierStepCount] quantitySamplePredicate:nil anchorDate:NSDate intervalComponents:NSDateComponents];[healthStore executeQuery:query];
2. CMPedometer で取得するデータが取得するタイミングによって値が変わることがある。
前日の1日の歩数を翌日の午前中に取得した値と翌日の午後に取得した値が異なることがあるのだ。
歩数データは正確なものではなく参考程度のものだから細かく気にする必要もないが、動作が不安定なのは改善してほしいところだ。