在微信运动、QQ健康等泛滥的年代,我们公司也终于要搞一个计步器,特此记录。
对于使用了M7或者M8处理器的设备(iPhone5s、iPhone6、iPhone6 Plus、iPhone6s、iPhone6s Plus、),Core Motion框架支持了一些预置的motion动作,比如步数、爬楼还有移动类型(行走、骑行等等)。
所以计步器的开发其实很简单,我们只需要用Core Motion框架就可以直接从设备读取监测了。当然我们还可以用HealthKit进行开发,在这里我们不进行详细的介绍。
Core Motion中的CMStepCounter和CMPedometer是我们今天的重点。
CMPedometer
在iOS8及其以上系统中我们可以使用CMPedometer类获取行走相关信息(步数、距离、上楼、下楼、当前速度等)。
当前设备是否可以获取步数
+ (BOOL)isStepCountingAvailable;
当前设备是否可以获取距离
+ (BOOL)isDistanceAvailable;
当前设备是否可以获取上下楼层数
+ (BOOL)isFloorCountingAvailable;
当前设备是否可以获取速度(s/m)
+ (BOOL)isPaceAvailable
当前设备是否可以获取节奏
+ (BOOL)isCadenceAvailable
根据开始和结束时间查询行走相关信息
- (void)queryPedometerDataFromDate:(NSDate *)start
toDate:(NSDate *)end
withHandler:(CMPedometerHandler)handler;
从某一时刻开始监测步数变化
- (void)startPedometerUpdatesFromDate:(NSDate *)start
withHandler:(CMPedometerHandler)handler;
停止监测步数变化
- (void)stopPedometerUpdates;
CMStepCounter
在iOS7中我们只能使用CMStepCounter类获取步数,并且仅能够获取步数。
判断步数统计是否有效
+ (BOOL)isStepCountingAvailable;
根据开始和结束时间查询步数
- (void)queryStepCountStartingFrom:(NSDate *)start
to:(NSDate *)end
toQueue:(NSOperationQueue *)queue
withHandler:(CMStepQueryHandler)handler;
开始断监测步数变化
- (void)startStepCountingUpdatesToQueue:(NSOperationQueue *)queue
updateOn:(NSInteger)stepCounts
withHandler:(CMStepUpdateHandler)handler;
停止监测步数变化
- (void)stopStepCountingUpdates;
总结
综上我们可以看出CMPedometer类可以获取的运动信息更加详细。而CMStepCounter类仅能够获取步数。我们在使用中需要判断系统版本使用不同的类获取行走信息。
我对CMPedometer 和CMStepCounter做了简单封装,使得你只需要一行代码就可以获取及监测行走信息。 代码奉上