About Motion Activity
Motion data stored by a device
モーションデータの取得方法
モーションデータを活用すると、ユーザーの状態(歩いている、走っている、乗り物に乗っている、静止している)をアプリ側で知ることができます。
ユーザーの状態によって、画面の表示を変える等、なんらかのかたちで活用できないか考えています。
CMMotionActivityManager
デバイスが記録したモーションデータへのアクセスを提供する
CMMotionActivity
このクラスは、モーションが更新された際のデータを保持している
Code example
// Check available
if ([CMMotionActivityManager isActivityAvailable]) {
// Create manager
self.motionActivityManager = [[CMMotionActivityManager alloc] init];
// Register handler
[self.motionActivityManager startActivityUpdatesToQueue:[NSOperationQueue mainQueue]
withHandler:^(CMMotionActivity *activity) {
[self _updateLabels:activity];
}];
}
期間を指定してモーションデータを取得する(過去7日間まで)
if ([CMMotionActivityManager isActivityAvailable]) {
self.motionActivityManager = [[CMMotionActivityManager alloc] init];
NSDate *now = [NSDate date];
NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *comps = [gregorian components:NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay | NSCalendarUnitHour fromDate:now];
[comps setHour:0];
NSDate *today = [gregorian dateFromComponents:comps];
__weak typeof(self) weakSelf = self;
[self.motionActivityManager queryActivityStartingFromDate:today
toDate:now
toQueue:[NSOperationQueue mainQueue]
withHandler:^(NSArray *activities, NSError *error) {
if (error) {
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:NSLocalizedString(@"Error", nil)
message:[error description]
delegate:nil
cancelButtonTitle:NSLocalizedString(@"OK", nil)
otherButtonTitles:nil, nil];
[alert show];
return ;
}
weakSelf.activities = [activities mutableCopy];
[self _updateCircles];
}];
}