作为一个天天喊着减肥的资深女程序媛儿胖纸,对于减肥的APP还是十分关注的,尤其是运动步数排行榜,其实也只是看到步数排名的那一小小会儿时间会不开森罢了,嘿嘿。恰逢开发需要,于是乎,,,下定决心研究一下这个步数的计步原理。现在iOS开发中获取步数一般两种方式,一种是利用重力感应通过一系列复杂的计算方式计算得到,另一种就是走捷径直接获取iPhone健康里的计步数据了。先写一个走捷径的吧,记录一下走过的坑儿。具体的原理神马的需要的时候再问度娘吧。
第一步:工程中引入HealthKit.framework,在需要实现的地方#import <HealthKit/HealthKit.h>.
第二步:检查设备是否支持HealthKit.(现在基本上都支持的,但是保险起见还是加上吧).
检查设备是否支持.jpg第三步:授权,即APP跳转到“访问健康数据”界面,把步数一行的开关打开,否则不能正常获取数据.
授权.jpg第四步:读取一天天的步数.
一天为单位的步数.jpg其中,步数是读取了手机健康里的所有数据,since1970.
HKStatistics *lastStatics = [result.statistics lastObject] 获取了今天的到目前为止的步数。
result.statistics 是返回的每一天的所有的数据的数组集合,需要的话可以利用 for (HKStatistics *statistic in result.statistics) 取出每一天的数据。
然而我们的APP中要获得的不仅仅是当前你今天走了多少步,还需要得到午饭后(12:00-14:00)和晚饭后(18:00-20:00)的步数,这就需要获取步数的时间单位是小时而不是天了。
只取今天的数据.jpg 以2小时为一个时间单位的数据.jpgfor (HKStatistics *statistic in result.statistics)打印出来数据的形式是这样的:2017-05-24 00:00:00 +0000 - 2017-05-24 02:00:00 +0000. 所以我取了数据的第11位和第12位,即 时 的位置. 判断时的位置是否是12,是的话取出来的就是12:00-14:00的步数了。
另外,它默认的是零时区的时间,所以我们还得转成成北京时间,转换方法如下:
转成当地时间.jpgOK,it's all. 如有错误还请看到的亲给予指导。
网友评论