iOS计步器实现

前几天写一个关于养生和医疗的一个项目,要写一个类似微信运动的计步器功能,只好先去研究一下计步器功能实现。

之前在我的印象中,直接调用healthKit框架获取苹果的健康应用数据就挺好,结果查了一大堆资料,还真给学到了不少。而且对新手而言,了解比应用更重要,所以本文中尽量减少了代码,偏于展示效果和简单说明。

需要清楚的是iPhone5s、iPhone6、iPhone6 Plus、iPhone6s、iPhone6s Plus使用了M7或者M8处理器,所以可以轻易的实现计步器功能。

所以:5s以下的设备是不支持手机计步。

HealthKit简述:

HealthKit框架提供了一个结构,应用可以使用它来分享健康和健身数据。HealthKit管理从不同来源获得的数据,并根据用户的偏好设置,自动将不同来源的所有数据合并起来。应用还可以获取每个来源的原始数据,然后执行自己的数据合并。

计步器功能比较普遍的有两种方法,不排除有什么贼好但是老猥琐的第三方库。

bid要打开HealthKit功能,Xcode-capabilities-HealthKit打开

第一种:直接了当的方法,直接调用系统的健康数据,基于HealthKit框架的,但是数据的更新时间不给力,貌似是一个小时更新一次数据,好可怜,如果是实时获取步数,这种方法就不堪入目了。

效果展示:

iOS计步器实现_第1张图片

使用HealthKit特别注意

你的应用不应该将HealthKit收集的数据用于广告或类似的服务。注意,在使用HealthKit框架应用中可以插播广告,但是你不能使用HealthKit中的数据来服务广告。

在没有用户的明确允许下,你不能向第三方展示任何HealthKit收集的数据。即使用户允许,你也只能向提供健康或健身服务的第三方展示这些数据。

你不能将HealthKit收集的数据出售给广告平台、数据代理人或者信息经销商。

如果用户允许,你可以将HealthKit数据共享给第三方用于医学研究。注意是用户允许

你必须明确说明,你和你的应用会怎样使用用户的HealthKit数据。

Demo地址:让子弹飞一飞

第二种:使用Core Motion:外部使用CMPedometer或者CMStepCounter来读取用户的步数和走的里程。

效果展示:

iOS计步器实现_第2张图片

Demo:再去飞一飞

其次,需要注意的是,Core Motion中的有两种计步:CMStepCounter和CMPedomete。CMPedomete必须iOS8.0以上才可以使用,但是CMPedomete却可以获取更多的运动信息(步数、距离、上下楼层数、速度、节奏、开始和结束时间查询行走相关信息、某一时刻开始监测步数变化),而CMStepCounter只能获取步数。也有那种对两种进行封装的方法。Demo:最后一次飞

两者的区别:

其实第一种Healthkit也是使用CMPedometer或CMStepCounter来读入用户的步数和走的里程的,只不过计算方法在手机内部。它是利用 iphone5s 以上的m处理器来获取数据计算了,所以5s以下的设备是不支持 CMPedometer 手机计步的。

直接使用HealthKit计步会有缺点,计步不准,主要是因为HealthKit记录的时区问题,iOS获取时间的时区按中国的时区少了8个小时

你可能感兴趣的:(iOS计步器实现)