微信和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框架对这个框架还是比较陌生的,上面只实现了简单的获取步数信息(其他信息也可以通过相同方式获取),代码中有不足的地方希望能够指出。

转载于:https://www.cnblogs.com/luoxiaofu/p/5259320.html

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

  1. iOS从健康app中获取步数信息

    统计步数信息并不需要我们自己去实现,iOS自带的健康app已经为我们统计好了步数数据 我们只要使用HealthKit框架从健康app中获取这个数据信息就可以了 1.如下图所示 在Xcode中打开Hea ...

  2. HealthKit 从健康app中获取步数信息

    原文:http://blog.csdn.net/dynastyting/article/details/51858595 微信和QQ的每日步数最近十分火爆,我就想为自己写的项目中添加一个显示每日步数的 ...

  3. iOS 使用HealthKit框架实现获取今日步数

    Demo地址:我的github仓库 HealthKit hey!宝宝又来更新博客了! 今天早上查看天气,发现自己缺少一个查看天气的APP, 于是下载了一个"墨迹天气",结果宝宝在欣 ...

  4. java如何取到配置文件中值,从配置文件中获取配置信息的几种方法

    1.利用ResourceBundle类从properties文件中获取配置信息 创建配置文件并写入配置信息 image.png 使用以下代码可以轻松获取配置信息 package com.course. ...

  5. 小陈教你利用laravel框架实现Todos APP

    小陈教你利用laravel框架实现Todos APP 一.Laravel的环境搭建 二.在Laravel中创建视图 三.添加路由 四.建立控制器 五.效果图实现 一.Laravel的环境搭建 第一步: ...

  6. 利用ZooKeeper框架在Vmware虚拟机中搭建3台Linux分布式集群

    利用ZooKeeper框架在Vmware虚拟机中搭建3台Linux分布式集群 概述 配置 具体步骤 node1虚拟机制作 安装及固定IP 关闭防火墙 JDK安装 关闭SELinux 虚拟机克隆 固定I ...

  7. 利用EXIF库读取jpg文件中的经纬度信息

    利用EXIF库读取jpg文件中的经纬度信息 EXIF库API参考:http://code.ciaoca.com/javascript/exif-js/ <!DOCTYPE html> &l ...

  8. c linux 获取cpuid_[C] 在GCC中获取CPUID信息(兼容VC)

    前面我们尝试过在VC中获取CPUID信息.现在再来试试GCC编译器. 一.调用CPUID指令 怎么调用CPUID指令呢?有三种办法-- 1. 用汇编语言编写一个cpuid函数,然后调整链接器配置,在C ...

  9. [C] 在GCC中获取CPUID信息(兼容VC)

    作者:zyl910 前面我们尝试过在VC中获取CPUID信息.现在再来试试GCC编译器. 一.调用CPUID指令 怎么调用CPUID指令呢?有三种办法-- 1. 用汇编语言编写一个cpuid函数,然后 ...

最新文章

  1. 你是怎样给下属分配工作
  2. 理解并实施:GLBP(ccna200-120新增考点)
  3. C# 子类实例化基类 基类使用不了子类的方法_C#高级编程面试考题
  4. CBT的完整形式是什么?
  5. PAT-乙级-1034 有理数四则运算
  6. 【word基础知识】word转pdf时出现空白页如何删除?
  7. HBuilderX真机调试检测不到魅族手机
  8. jquery中的html代码、文本以及值
  9. 会员充值-》解决方案之一
  10. C++自动类型转化--特殊构造函数方法和重载的运算符方法
  11. U盘中病毒,文件夹变成exe文件
  12. Unity—火焰特效制作
  13. 小码哥-玩转【斗鱼直播APP】系列之界面分析
  14. ic618画版图2.0
  15. pandas dataframe rolling 移动计算
  16. JumpServer开源堡垒机完成龙芯架构兼容性认证
  17. 逆向菜鸡实战破解思科模拟器登录限制
  18. 我是一只IT小小鸟里面牛人的博客
  19. Educoder 机器学习 第1关:基于贝叶斯决策理论的分类方法
  20. [BUG 记录] Unable to determine the device handle for GPU 0000:05:00.0: GPU is lost. Reboot the system

热门文章

  1. VC----SDK下对窗口非客户区的操作
  2. python pandas series_Python数据分析-pandas之Series
  3. 老婆给我推荐了一个副业,现在收入高于我工资,我要不要辞职?
  4. 苹果平板买哪款最好?
  5. 为什么现在的很多酒店都不收押金,只收房费了?
  6. 闻乐天授江州司马 [唐] 元稹
  7. 低学历的人就不能创业了吗?
  8. 如何写出有效的引流文案?
  9. 你根本就不需要认识这么多大佬
  10. The world’s largest