iOS CMPedometer获取运动步数

        CMPedometer是iOS 8.0推出的,用来统计用户的的运动数据(步数、楼层、公里数等)。最近项目需要获取用户步数,使用CMPedometer来实现,简单说一下实现步骤:

1.获取隐私权限

在info.plist里面增加Privacy - Motion Usage Description,填写描述文件。

2.使用

声明一个属性,不然他容易泄露,苹果的好多框架都是这样的,不能直接使用,得千万注意

@property(nonatomic,strong)CMPedometer pedometer;


 _pedometer = [[CMPedometer alloc]init];





    NSCalendar *calendar = [NSCalendar currentCalendar];

    NSString *dayStr=[NSString stringWithFormat:@"%@",@"20190513"]];

    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];

    [dateFormattersetDateFormat:@"yyyyMMdd"];

//    [dateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:8]];//解决8小时时间差问题---获取步数不需要转成北京时间,转成北京时间后导致8点前的步数不可获取,原因需要后期更新,正在研究。。。。。。。

    NSDate*startDate = [dateFormatterdateFromString:dayStr];

    // 结束日期

    NSDate *endDate = [calendar dateByAddingUnit:NSCalendarUnitDay value:1 toDate:startDate options:0];


    NSLog(@"%@____%@",startDate,endDate);

    //判断手机是否支持记步功能,不能作为没有授权的标识

    if ([CMPedometer isStepCountingAvailable])

    {


        [self.pedometer queryPedometerDataFromDate:startDate toDate:endDate withHandler:^(CMPedometerData * _Nullable pedometerData, NSError * _Nullable error) {

            NSLog(@"%@____%@",startDate,endDate);

            if(error)

            {

                if(error.code==105)

            {

//没有授权获取运动数据

            }

            else

            {

                __weaktypeof(self) weakSelf =self;

                dispatch_async(dispatch_get_main_queue(), ^{

//主线程里面进行展示步数的UI刷新

                });

            }

        }];

    }

    else

    {

        [[[UIAlertView alloc] initWithTitle:@"提示" message:@"该手机暂不支持获取步数!" delegate:self cancelButtonTitle:@"确定" otherButtonTitles:nil, nil] show];


    }

你可能感兴趣的:(iOS CMPedometer获取运动步数)