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

来源:互联网 发布:嘉庚学校域名 编辑:程序博客网 时间:2024/05/08 05:40

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



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


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

 在- (void)viewDidLoad中获取权限


- (void)viewDidLoad {
    [superviewDidLoad];
     
    //查看healthKit在设备上是否可用,ipad不支持HealthKit
    if(![HKHealthStore isHealthDataAvailable])
    {
        NSLog(@"设备不支持healthKit");
    }
     
    //创建healthStore实例对象
    self.healthStore = [[HKHealthStore alloc] init];
     
    //设置需要获取的权限这里仅设置了步数
    HKObjectType *stepCount = [HKObjectType quantityTypeForIdentifier:HKQuantityTypeIdentifierStepCount];
     
    NSSet*healthSet = [NSSetsetWithObjects:stepCount, nil];
     
    //从健康应用中获取权限
    [self.healthStore requestAuthorizationToShareTypes:nilreadTypes:healthSet completion:^(BOOLsuccess, NSError* _Nullable error) {
        if(success)
        {
            NSLog(@"获取步数权限成功");
            //获取步数后我们调用获取步数的方法
            [selfreadStepCount];
        }
        else
        {
            NSLog(@"获取步数权限失败");
        }
    }];
     
}

 读取步数


//查询数据
- (void)readStepCount
{
    //查询采样信息
    HKSampleType *sampleType = [HKQuantityType quantityTypeForIdentifier:HKQuantityTypeIdentifierStepCount];
     
    //NSSortDescriptors用来告诉healthStore怎么样将结果排序。
    NSSortDescriptor*start = [NSSortDescriptorsortDescriptorWithKey:HKSampleSortIdentifierStartDate ascending:NO];
    NSSortDescriptor*end = [NSSortDescriptorsortDescriptorWithKey:HKSampleSortIdentifierEndDate ascending:NO];
     
    /*查询的基类是HKQuery,这是一个抽象类,能够实现每一种查询目标,这里我们需要查询的步数是一个
    HKSample类所以对应的查询类就是HKSampleQuery。
    下面的limit参数传1表示查询最近一条数据,查询多条数据只要设置limit的参数值就可以了
     */
    HKSampleQuery *sampleQuery = [[HKSampleQuery alloc] initWithSampleType:sampleType predicate:nillimit: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;
        [[NSOperationQueuemainQueue] addOperationWithBlock:^{
             
            //查询是在多线程中进行的,如果要对UI进行刷新,要回到主线程中
            NSLog(@"最新步数:%@",stepStr);
        }];
         
    }];
    //执行查询
    [self.healthStore executeQuery:sampleQuery];
}

0 0
原创粉丝点击