如何获取系统健康程序的权限和信息

1.首先,我们需要在xcode 中设置HealthKit的开关



2.在需要获取健康信息的地方导入# import<HealthKit/HealthKit.h>


@interface ViewController ()
 
@property ( nonatomic , strong) HKHealthStore *healthStore;
 
@end

 在- (void)viewDidLoad中获取权限


- ( 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 (@ "获取步数权限失败" );
         }
     }];
     
}

 读取步数


//查询数据
- ( 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];
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值