iOS利用HealthKit框架从健康app中获取步数信息

统计步数信息并不需要我们自己去实现,iOS自带的健康app已经为我们统计好了步数数据

我们只要使用HealthKit框架从健康app中获取这个数据信息就可以了

这篇文章对HealthKit框架进行了简单的介绍:http://www.cocoachina.com/ios/20140915/9624.html

对HealthKit框架有了简单的了解后我们就可以开始了

1.如下图所示 在Xcode中打开HealthKit功能

2.在需要的地方#import <HealthKit/HealthKit.h>(这里我为了方便直接在viewController写了所有代码,我也在学习这个框架,个人感觉把获取数据权限的代码放在AppDelegate中更好)

获取步数分为两步1.获得权限  2.读取步数 

3.代码部分

1
2
3
4
5
@interface  ViewController ()
 
@property  ( nonatomic , strong) HKHealthStore *healthStore;
 
@end

 在- (void)viewDidLoad中获取权限

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
- ( void )viewDidLoad {
     [ super  viewDidLoad];
     
     //查看healthKit在设备上是否可用,ipad不支持HealthKit
     if (![HKHealthStore isHealthDataAvailable])
     {
         NSLog (@ "设备不支持healthKit" );
     }
     
     //创建healthStore实例对象
     self .healthStore = [[HKHealthStore alloc] init];
     
     //设置需要获取的权限这里仅设置了步数
     HKObjectType *stepCount = [HKObjectType quantityTypeForIdentifier:HKQuantityTypeIdentifierStepCount];
     
     NSSet  *healthSet = [ NSSet  setWithObjects:stepCount,  nil ];
     
     //从健康应用中获取权限
     [ self .healthStore requestAuthorizationToShareTypes: nil  readTypes:healthSet completion:^( BOOL  success,  NSError  * _Nullable error) {
         if  (success)
         {
             NSLog (@ "获取步数权限成功" );
             //获取步数后我们调用获取步数的方法
             [ self  readStepCount];
         }
         else
         {
             NSLog (@ "获取步数权限失败" );
         }
     }];
     
}

 读取步数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
//查询数据
- ( void )readStepCount
{
     //查询采样信息
     HKSampleType *sampleType = [HKQuantityType quantityTypeForIdentifier:HKQuantityTypeIdentifierStepCount];
     
     //NSSortDescriptors用来告诉healthStore怎么样将结果排序。
     NSSortDescriptor  *start = [ NSSortDescriptor  sortDescriptorWithKey:HKSampleSortIdentifierStartDate ascending: NO ];
     NSSortDescriptor  *end = [ NSSortDescriptor  sortDescriptorWithKey:HKSampleSortIdentifierEndDate ascending: NO ];
     
     /*查询的基类是HKQuery,这是一个抽象类,能够实现每一种查询目标,这里我们需要查询的步数是一个
     HKSample类所以对应的查询类就是HKSampleQuery。
     下面的limit参数传1表示查询最近一条数据,查询多条数据只要设置limit的参数值就可以了
      */
     HKSampleQuery *sampleQuery = [[HKSampleQuery alloc] initWithSampleType:sampleType predicate: nil  limit:1 sortDescriptors:@[start,end] resultsHandler:^(HKSampleQuery * _Nonnull query,  NSArray <__kindof HKSample *> * _Nullable results,  NSError  * _Nullable error) {
         //打印查询结果
         NSLog (@ "resultCount = %ld result = %@" ,results.count,results);
         //把结果装换成字符串类型
         HKQuantitySample *result = results[0];
         HKQuantity *quantity = result.quantity;
         NSString  *stepStr = ( NSString  *)quantity;
         [[ NSOperationQueue  mainQueue] addOperationWithBlock:^{
             
             //查询是在多线程中进行的,如果要对UI进行刷新,要回到主线程中
             NSLog (@ "最新步数:%@" ,stepStr);
         }];
         
     }];
     //执行查询
     [ self .healthStore executeQuery:sampleQuery];
}

 4.现在,我们就已经能够从健康app中读取步数信息了

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值