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