详解iOS 计步器的几种实现方式

2020-01-21 00:37:44王振洲

4、调用- (void)startPedometerUpdatesFromDate:(NSDate *)start withHandler:(CMPedometerHandler)handler方法获取从某个时间点到现在的步数,距离,楼层等信息。此方法会实时更新数据。


 [self.pedometer startPedometerUpdatesFromDate:fromDate withHandler:^(CMPedometerData * _Nullable pedometerData, NSError * _Nullable error) {
  // 如果没有错误,具体信息从pedometerData参数中获取
 }];

5、不需要使用的时候,调用stopPedometerUpdates方法停止更新


 [self.pedometer stopPedometerUpdates];

6、如果不需要实时更新数据,可直接调用- (void)queryPedometerDataFromDate:(NSDate *)start toDate:(NSDate *)end withHandler:(CMPedometerHandler)handler;查询某个时间段内的数据,不过只能查询七天内的数据。


 [self.pedometer queryPedometerDataFromDate:start toDate:end withHandler:^(CMPedometerData * _Nullable pedometerData, NSError * _Nullable error) {
  // 如果没有错误,具体信息从pedometerData参数中获取
 }];

使用HealthKit框架获取苹果健康数据

在HealthKit中,使用HKHealthStore类来访问健康数据,健康数据的类型有很多类,苹果健康app中的健身记录、营养摄入、睡眠状况等等都可以进行数据读取和共享(即第三方app写入数据到苹果健康app)。

大概步骤:

1、在Xcode中, 打开HealthKit 功能

iOS,计步器,计步器实现,ios计步器代码实现

开启HealthKit功能

1、调用isHealthDataAvailable方法检查设备HealthKit是否可用。


 if ([HKHealthStore isHealthDataAvailable]) {
 // add code to use HealthKit here...
 }

2、如果可用,创建HKHealthStore对象


 self.healthStore = [[HKHealthStore alloc] init];

3、向用户请求授权共享或读取健康数据, 调用- (void)requestAuthorizationToShareTypes:(nullable NSSet<HKSampleType *> *)typesToShare readTypes:(nullable NSSet<HKObjectType *> *)typesToRead completion:(void (^)(BOOL success, NSError * _Nullable error))completion;方法,例如下面请求读取步数和距离数据


 NSSet<HKSampleType *> *shareTypes = nil;
 HKQuantityType *stepType = [HKQuantityType quantityTypeForIdentifier:(HKQuantityTypeIdentifierStepCount)];
 HKQuantityType *distanceType = [HKQuantityType quantityTypeForIdentifier:HKQuantityTypeIdentifierDistanceWalkingRunning];
 NSSet<HKObjectType *> *readTypes = [NSSet setWithObjects:stepType, distanceType, nil];
 [self.healthStore requestAuthorizationToShareTypes:shareTypes readTypes:readTypes completion:^(BOOL success, NSError * _Nullable error) {
    
 }];