代码地址如下:
http://www.demodashi.com/demo/11658.html这篇文章介绍两种可以获取计步数据的方法,一种是采用CMPedometer获取手机计步器数据,另一种是采用HealthKit框架从手机健康App中获取计步数据。另外玩了一下写入数据到健康App。有描述不当之处,望指点。
花絮(用HealthKit框架构建app,写入数据到苹果健康app中,QQ和Keep等第三方app的运动数据都会随之改变,猜测它们的运动数据是直接从苹果健康app中获取,而且没有过滤掉其它数据来源。而微信运动的数据不会变,猜测其来源可能是使用CMPedometer类获取的,因为测试发现把微信运动的数据来源(苹果健康)关闭后,依然会有运动数据,而且该运动数据和CMPedometer类获取的一致。)
使用CMPedometer类来获取步数和距离
使用时需要导入
CMPedometer
+ (BOOL)isStepCountingAvailable;
设备是否支持计步功能
+ (BOOL)isDistanceAvailable;
除了计步,设备是否支持距离估计
+ (BOOL)isFloorCountingAvailable;
除了计步,设备是否支持台阶计数
+ (BOOL)isPaceAvailable NS_AVAILABLE(NA,9_0);
除了计步,设备是否支持速度估计
+(BOOL)isCadenceAvailable NS_AVAILABLE(NA,9_0);
除了计步,设备是否支持节奏估计
+ (BOOL)isPedometerEventTrackingAvailable NS_AVAILABLE(NA,10_0) __WATCHOS_AVAILABLE(3_0);
设备是否支持计步器事件
- (void)queryPedometerDataFromDate:(NSDate *)start
在给定时间范围内查询用户的行走活动,数据最多可以使用7天内有效,返回的数据是从系统范围的历史记录中计算出来的,该历史记录是在后台连续收集的。结果返回在串行队列中。
toDate:(NSDate *)end
withHandler:(CMPedometerHandler)handler;
- (void)startPedometerUpdatesFromDate:(NSDate *)start
在串行队列上启动一系列连续计步器更新到处理程序。 对于每次更新,应用程序将从指定的开始日期和与最新确定相关联的时间戳开始收到累积的行人活动。 如果应用程序在后台进行背景调整,则应用程序将在下次更新中收到在后台期间累积的所有行人活动。
withHandler:(CMPedometerHandler)handler;
-(void)stopPedometerUpdates;
停止计步器更新
-(void)startPedometerEventUpdatesWithHandler:(CMPedometerEventHandler)handler NS_AVAILABLE(NA,10_0) __WATCHOS_AVAILABLE(3_0);
在串行队列上启动计步器事件更新。 事件仅在应用程序在前台/后台运行时可用。
-(void)stopPedometerEventUpdates NS_AVAILABLE(NA,10_0) __WATCHOS_AVAILABLE(3_0);
停止计步器事件更新
CMPedometerData
@property(readonly, nonatomic) NSDate *startDate;
计步器数据有效期间的开始时间。这是会话或历史查询请求的开始时间。
@property(readonly, nonatomic) NSDate *endDate;
计步器数据有效期间的结束时间。对于更新,这是最新更新的时间。 对于历史查询,这是请求的结束时间。
@property(readonly, nonatomic) NSNumber *numberOfSteps;
用户的步数
@property(readonly, nonatomic, nullable) NSNumber *distance;
用户行走和跑步时估计的一米为单位的距离。若设备不支持则值为nil
@property(readonly, nonatomic, nullable) NSNumber *floorsAscended;
上楼的大概楼层数,若设备不支持则值为nil
@property(readonly, nonatomic, nullable) NSNumber *floorsDescended;
下楼的大概楼层数, 若设备不支持则值为nil
@property(readonly, nonatomic, nullable) NSNumber *currentPace NS_AVAILABLE(NA,9_0);
对于更新,这将以s / m(每米秒)返回当前速度。 如果满足以下条件,则值为