iOS计步器功能实现之CoreMotion(一)

最近公司的app中新增加了一个计步器的功能,从网上了搜到了healthKit可以实现记步功能,但是分析后发现HealthKit应该是调用的苹果自己的API来实现的专门为自身的运动手环,苹果手表,电子称来设计的。看到微信也有记步功能。后来又根据同行好友的提示找到了方向,那就是CoreMotion这个框架。这个框架的功能很强大的,可以纪录用户的运动状态,走了多少步,走了多远,什么时候运动了,什么时候运动停止了。加速度等等。这里就不一一的详细说了,这里重点说一下如何记步功能实现。
结合方法来说下哦。

-(void)gotoGetStepCountFrom:(NSDate *)fromeDate to:(NSDate *)toDate CallBack:(void(^)(NSString *steps))callBack{   //根据起始期,终止日期进行查询步行数量



    //判断记步功能
    if ([CMPedometer isStepCountingAvailable]) {
        [[APP_DELEGATE sharedPedometer] queryPedometerDataFromDate:fromeDate toDate:toDate withHandler:^(CMPedometerData * _Nullable pedometerData, NSError * _Nullable error) {
            if (error) {
                NSLog(@"error====%@",error);
            }else {
                //                NSLog(@"AAA步数====%@",pedometerData.numberOfSteps);
                //                NSLog(@"AAA距离====%@",pedometerData.distance);
                NSString *numberOfSteps = [NSString stringWithFormat:@"%@",pedometerData.numberOfSteps];
                callBack(numberOfSteps);
            }
        }];
    }else{
        NSLog(@"记步功能不可用");
    }


}

这个方法是一个pull方法,就是用户需要用的时候可以调用来获取某个时间段的步行数,步行的距离。另外有一点需要注意:最多只能获取最近7天的数据,所以小伙伴们用的时候注意下哦,另外这个数据苹果只是做了记录步数,时间点的 操作,具体的数据整理分析的工作还是要我们去做才能转化为我们用的数据。这个方法主要就是用来查看运动记录用的
下面给大家介绍一下实时记录运动步数的方法。这个方法是一个push方法就是只要运动的步数发生改变就会触发该方法,app关掉,或者挂起状态除外哦。但是该方法虽然没有执行,但是手机仍然在记录用户的运动状态,等到下次用户开启app的时候,可以把之前的运动书去读取出来。废话不多说了,直接上代码:

-(void)gotoOpenStepCountFunction{  //打开计步器功能后台记步的方法

    _pedometer = [APP_DELEGATE sharedPedometer];

    [NSUSER_DEFAULTS setBool:YES forKey:@"startStepCount"];
    [NSUSER_DEFAULTS synchronize];

    if ([CMPedometer isStepCountingAvailable]) {
        [_pedometer startPedometerUpdatesFromDate:[NSDate date] withHandler:^(CMPedometerData * _Nullable pedometerData, NSError * _Nullable error) {

            if (error) {
                NSLog(@"error====%@",error);
                [PAFFHUD showAlertNoImageWithText:@"计步器功能开始失败"];
                [NSUSER_DEFAULTS setBool:NO forKey:@"startStepCount"];
                [NSUSER_DEFAULTS synchronize];

            }else {
                NSLog(@"BBB步数====%@",pedometerData.numberOfSteps);
                NSLog(@"BBB距离====%@",pedometerData.distance);

                NSDictionary *dic =[NSDictionary dictionaryWithObjectsAndKeys:[NSString stringWithFormat:@"%@",pedometerData.numberOfSteps],@"numberOfSteps", nil];
                [[NSNotificationCenter defaultCenter] postNotificationName:@"numberOfSteps" object:nil userInfo:dic];


            }

        }];

    }else{

        DLog(@"计步器不可用");
        [PAFFHUD showAlertNoImageWithText:@"计步器不可用"];
        [NSUSER_DEFAULTS setBool:NO forKey:@"startStepCount"];
        [NSUSER_DEFAULTS synchronize];
    }


}

-(void)gotoCloseStepCountFucntion{

    if ([CMPedometer isStepCountingAvailable]) {

        _pedometer = [APP_DELEGATE sharedPedometer];
        [NSUSER_DEFAULTS setBool:NO forKey:@"startStepCount"];
        [NSUSER_DEFAULTS synchronize];
        [_pedometer stopPedometerUpdates];

    }

}

另外需要说明的是开启后台记步实时更新的这个方法,如果本来就是开启的话,那么这个方法就不再执行了,如果没有的话才会执行的。但是若开启的话,从开始的时间点步行数会被重置为0.这点需要注意下。
当然下面的close的方法直接就是关闭后台记步实时跟新的功能了。不想用的时候关掉就好了。
最基本的的计步器到这里就说完了,建议大家要做的可以看看官方的API,里面都有方法的说明的。可以更好的理解。
下面把我的dem分享给大家,如果大家觉得哪些地方理解有偏差的或者不对的话,建议大家提一下建议哦,大家一块进步。
demo下载地址:计步器demo
如果感兴趣的话可以看我的下一篇博客《iOS计步器功能实现之CoreMotion如何读取数据(二)》
参考博客:http://www.jianshu.com/p/e5f332f9b27c

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值