ios-步数的获取
来源:互联网 发布:如何自学软件测试 编辑:程序博客网 时间:2024/06/05 06:12
在iphone设备中我们应该如何的去获取用户所走的步数,其实大概可以有三种方式
1、利用HealthKit框架从健康App中去获取步数,缺点
2、可以利用废弃的CMStepCounter
3、利用 CMPedometer类来获取步数
第一个我就不介绍了,网上有很多教程
简单的介绍下后两个吧。
CMStepCounter在ios8出来的时候被废弃,原因其实就是因为它其实获取数据不是那么的准确,以及它的功能太有限了,举个例子下面只能判断步数是否可以获取。
//判断硬件是否可用if(![CMStepCounter isStepCountingAvailable]) { return; } CMStepCounter * stepCounter = [[CMStepCounter alloc]init]; [stepCounter startStepCountingUpdatesToQueue:[NSOperationQueue new] updateOn:1 withHandler:^(NSInteger numberOfSteps, NSDate * _Nonnull timestamp, NSError * _Nullable error) { dispatch_sync(dispatch_get_main_queue(), ^{ self.StepLabel.text = [NSString stringWithFormat:@"你走了多少步:%ld",(long)numberOfSteps]; }); }];效果图如下所示
所以在ios8的时候新出了一个类CMPedometer,这个类就可以判断很多东西也可以获取很多东西了,当然这个也是有延迟性的
用法如下这里需要注意的就是我们获取数据都是在CMPedometerData这个类中通过它的属性来获取,属性有很多就不一一列举了。简单的列出几个
@property(readonly, nonatomic) NSDate *startDate;//开始时间
@property(readonly, nonatomic) NSDate *endDate;//结束时间 @property(readonly, nonatomic) NSNumber *numberOfSteps;//步数 @property(readonly, nonatomic, nullable) NSNumber *distance;//距离 @property(readonly, nonatomic, nullable) NSNumber *floorsAscended;//上了几个楼 @property(readonly, nonatomic, nullable) NSNumber *floorsDescended;//下了多少楼
还有需要注意的是我们这里需要去在info.plist文件中去设置下面这个选项否则就会崩溃还有需要注意的是CMPedometer对象要声明为属性,否则会报下面这样的错误
//1、也要先去判断硬件是否可用 if(![CMPedometer isStepCountingAvailable]) { NSLog(@"设备不可用"); return; } self.pedometer=[CMPedometer new]; [self.pedometer startPedometerUpdatesFromDate:[NSDate date] withHandler:^(CMPedometerData * _Nullable pedometerData, NSError * _Nullable error) { if(error) { NSLog(@"%@",error); return; } NSNumber * number = pedometerData.numberOfSteps; NSLog(@"%@",[NSThread currentThread]); [self performSelectorOnMainThread:@selector(changeStep:) withObject:number waitUntilDone:YES]; NSLog(@"1"); }]; }-(void)changeStep:(NSNumber *)number{ [NSThread sleepForTimeInterval:5]; self.StepLabel.text = [NSString stringWithFormat:@"你走了多少步:%d", number.intValue]; NSLog(@"2");}
得到的效果如下所示
这里需要注意的是startPedometerUpdatesFromDate的回调方法是在子线程中调用的
我们要更新UI的话肯定要在主线程中进行更新,还有这里需要注意的是performSelectorOnMainThread:@selector(changeStep:) withObject:number waitUntilDone:YES]
这个方法的第三个参数waitUntilDone为YES的话表示阻塞当前线程直到指定选择器在主线程中执行完毕。选择YES会阻塞这个线程;选择NO,本方法会立刻返回。
如果为YES的话调用的结果如下所示
如果为NO的话
还有就是在主线程中也是一样的,当这个参数为YES,时表示当前runloop循环中的时间马上响应这个事件,如果为NO则runloop会将这个事件加入runloop队列在合适的时间执行这个事件。所以如果为YES,就会把我们上面的想让它先执行的方法先执行了。
当然我们也可以选择获取自己今天走的步数,是和苹果健康软件中的是一样的,下面是设置时间,然后我们在startPedometerUpdatesFromDate:传入lastDate就可以了
NSTimeInterval timeInterval =12*60*60; NSDate *date =[NSDate date]; NSDate *lastDate =[date dateByAddingTimeInterval:-timeInterval];
停止更新步数
[self.pedometer stopPedometerUpdates];
- ios-步数的获取
- IOS -- 获取用户的健康数据的运动步数
- iOS 获取健康里的信息(步数和公里数)
- iOS开发 获取系统HealthKit的步数
- iOS使用HealthKit获取今天步数
- iOS 获取步数等健康信息
- iOS-获取手机健康步数,去除人为添加的数据
- iOS-获取手机健康步数,去除人为添加的数据
- iOS利用HealthKit获取健康里的步数和睡眠时间
- iOS-获取手机健康步数,去除人为添加的数据
- iOS陀螺仪计算行走的步数
- iOS使用HealthKit框架实现获取今日步数
- iOS使用HealthKit框架实现获取今日步数
- iOS获取健康步数从加速计到healthkit
- iOS获取健康步数从加速计到healthkit
- iOS 健康 获取运动步数 距离 时间
- HealthKit 获取健康步数,去除人为添加的数据
- iOS利用HealthKit框架从健康app中获取步数信息
- 无偿加班竟然被开除,还有这种操作?
- 双11程序猿最想要的奢侈品竟然是这些!
- pytorch学习笔记(十三):backward过程的底层实现解析
- SyntaxError: Non-ASCII character '\xe5' in file
- Kibana 默认Web 端口 5601 改为 80 的简单办法
- ios-步数的获取
- iptables案例:通过本地服务器转发访问远程数据库
- 深入浅出理解有限状态机
- 面向对象---多态
- 程序猿的日常——SpringMVC系统架构与流程回顾
- Maven之新建web项目后目录不全与jsp报错-yellowcong
- html head标签结构说明
- py-faster-rcnn demo.py分析(py-faster-rcnn)
- JavaShowAlgorithm-Binary Tree Longest Consecutive Sequence