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


    微信和QQ的每日步数最近十分火爆,我就想为自己写的项目中添加一个显示每日步数的功能,上网一搜好像并有相关的详细资料,自己动手丰衣足食。

    统计步数信息并不需要我们自己去实现,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中读取步数信息了

     5.附上一个简单的小demo:  https://github.com/wl356485255/ReadStepCount (注意更改Bundle ID,并且使用真机进行调试)

     6.我现在也在学习HealthKit框架对这个框架还是比较陌生的,上面只实现了简单的获取步数信息(其他信息也可以通过相同方式获取),代码中有不足的地方希望能够指出。

  • 相关阅读:
    D3.js比例尺 定量比例尺 之 线性比例尺(v3版本)
    D3.js的基础部分之数组的处理 集合(Set)(v3版本)
    D3.js的基础部分之数组的处理 映射(Map)(v3版本)
    D3.js (v3)+react框架 基础部分之认识选择集和如何绘制一个矢量图
    D3.js的一些基础部分 (v3版本)
    Flask 教程 第九章:分页
    Flask 教程 第八章:粉丝
    Flask 教程 第七章:错误处理
    Flask 教程 第六章:个人主页和头像
    Flask 教程 第五章:用户登录
  • 原文地址:https://www.cnblogs.com/luoxiaofu/p/5259320.html
Copyright © 2020-2023  润新知