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

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

我们只要使用HealthKit框架从健康app中获取这个数据信息就可以
HeathKit提供了许多查询读取数据的方法:

1.直接方法查询。对于特征样本,可以直接查询获取到,这些方法只能查询特征样本。更多信息: HKHealthStore Class Reference

2.样本查询。这是使用最多的查询。使用样本查询可以查询在HeathKit中任意的数据。而且可以对结果进行排序等。更多信息:HKSampleQuery Class Reference

3.观察者查询。这是一个长时间运行的查询,它会检测HealthKit存储,并在匹配到的样本发生变化时通知你。如果当存储发生变化时你想得到通知,就使用观察者查询。更多信息:HKObserverQuery Class Reference

4.锚定对象查询。用这种查询来搜索添加进存储的项。当锚定查询第一次执行时,会返回存储中所有匹配的样本。在接下来的执行中,只会返回上一次执行之后添加的项目。通常,锚定对象查询会和观察者查询一起使用。观察者查询告诉你某些项目发生了变化,而锚定对象查询来决定有哪些(如果有的话)项目被添加进了存储。更多信息:HKAnchoredObjectQuery Class Reference
5.统计查询。使用这种查询来在一系列匹配的样本中执行统计运算。你可以使用统计查询来计算样本的总和、最小值、最大值或平均值。更多信息: HKStatisticsQuery Class Reference

6.统计集合查询。使用这种查询来在一系列长度固定的时间间隔中执行多次统计查询。通常使用这种查询来生成图表。查询提供了一些简单的方法来计算某些值,例如,每天消耗的总热量或者每5分钟行走的步数。统计集合查询是长时间运行的。查询可以返回当前的统计集合,也可以监测HealthKit存储,并对更新做出响应。更多信息,参见 HKStatisticsCollectionQuery Class Reference。

7.Correlation查询。使用这种查询来在correlation查找数据。这种查询可以为correlation中每个样本类型包含独立的谓词。如果你只是想匹配correlation类型,那么请使用样本查询。更多信息,参见 HKCorrelation Class Reference。

8.来源查询。使用这种查询来查找HealthKit存储中的匹配数据的来源(应用和设备)。来源查询会列出储存的特定样本类型的所有来源。更多信息,参见HKSourceQuery Class Reference。

HKUnit

这个类代表要查询的数据的单位的类,比如体重的单位,可以为kg、lbs等。这个类为不同的数据类型提供了不同的单位方法。一般在创建前面介绍的样本类型的时候,都需要这个类为样本添加对应的单位。而且提供了一些数学运算,比如千米、米、厘米等之间的转换。

在某些场合,你可以使用格式化器来本地化数量。iOS8提供了提供了新的格式化器来处理长度(NSLengthFormatter)、质量(NSMassFormatter)和能量(NSEnergyFormatter)。对于其他的数量,你需要自己来换算单位和本地化数据。

HKHeathStore

HeathKit的核心就是它,它代表HeathKit的数据库,使用它就可以从数据库中读取数据。比较重要的方法:

isHealthDataAvailable:判断当前设置是否支持HeathKit
requestAuthorizationToShareTypes(typesToShare: Set?, readTypes typesToRead: Set?, completion: (Bool, NSError?) -> Void): 向用户请求同意读写某些数据
saveObject(object: HKObject, withCompletion completion: (Bool, NSError?) -> Void) :向数据库中添加数据
executeQuery(query: HKQuery) :执行查询,即上面介绍的几种查询方法。

HeathKit使用

在使用HealthKit之前,必须要执行下列步骤:

打开HeathKit,在Target栏中,打开Capabilities菜单,将HealthKit这一项的开关设为ON的状态。
创建HeathManager.Swift 文件,并导入

#import "HeathKit.h"

HeathKit的核心是HeathStore,创建

func authorizeHealthKit(completion:((success:Bool,error:NSError!)->Void)!){}

然后调用在这个方法中调用isHealthDataAvailable判断当前设备是否支持HeathKit

//判断当前设备是否支持
if !HKHealthStore.isHealthDataAvailable(){
    let error = NSError(domain: "", code: 2, userInfo: [NSLocalizedDescriptionKey:"HealthKit is not available in this Device"])
    if completion != nil {
        completion(success: false, error: error)
    }
}

最后在上面的方法中,设置要读写的数据类型。

下面获取数据:
再为你的应用实例化一个 HKHealthStore 对象。每个应用只需要一个HealthKit存储实例。这个存储实例就是你和HealthKit数据库交互的主要接口。

let hkHealthStore = HKHealthStore()

使用 requestAuthorizationToShareTypes:readTypes:completion:来认证请求从HeathKit获取数据的权限。

//请求连接
hkHealthStore.requestAuthorizationToShareTypes(healthKitTypesToWrite as? Set<HKSampleType>, readTypes: healthKitTypesToRead as? Set<HKObjectType>) { (success, error) -> Void in

    if completion != nil{
        completion(success:success,error:error)
    }
    return 
}

如果当前设备支持HeathKit的时候,这样就会弹出一个请求界面,让用户选择是否同意你能够获取到你要请求的数据

HealthKit框架体系
对于一类应用程序来说,要进行开发,首先需要熟悉它的框架体系,即类。以下我们针对HealthKit中所使用的类进行了总结,如表1-1所示。
1-1 HealthKit框架体系
类 功能
NSObject NSObject是根类
HKBiologicalSexObject 可以枚举性别
HKBloodTypeObject 用来枚举血型
HKHealthStore 管理数据
HKObject 所有存储在HealthKit中的数据都是HKObject的子类。它是一个抽象的类
HKSample HeathKit样本,代表了由开始时间和结束时间相关的数据
HKCategorySample 状态样本
HKCorrelation 复合数据样本
HKQuantitySample 数量样本
HKWorkout 健身样本
HKObjectType 用来表示一个数据是什么类型的,HealthKit 中有几十种类型
HKCharacteristicType HKCharacteristicType类是HKObjectType类的具体子类
HKSampleType HKSampleType类是HKObjectType类的具体子类
HKCategoryType HKCategoryType类是HKObjectType类的具体子类
HKCorrelationType HKCorrelationType类是HKObjectType类的具体子类
HKQuantityType HKQuantityType类是HKObjectType类的具体子类
HKWorkoutType HKWorkoutType类是HKObjectType类的具体子类
HKQuantity 表示某一种数据单位的数量
HKQuery 谓词对象
HKAnchoredObjectQuery 锚查询
HKCorrelationQuery 复合数据查询
HKObserverQuery 观察者查询
HKSampleQuery 样本查询
HKSourceQuery 数据来源查询
HKStatisticsCollectionQuery 统计集合查询
HKStatisticsQuery 统计查询
HKSource 数据来源对象
HKStatistics 统计对象
HKStatisticsCollection 统计集合对象
HKUnit 基本的数据单位
HKWorkoutEvent 健身时间

对于简单的运动事实监控的状态的功能,HealthKit都可以实现,但是如果数据用来统计,插入广告等。在app审核过程中可能汇通不过哦。希望这些可以帮助你       0.0
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,457评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,837评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,696评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,183评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,057评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,105评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,520评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,211评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,482评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,574评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,353评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,213评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,576评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,897评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,174评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,489评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,683评论 2 335

推荐阅读更多精彩内容

  • The HealthKit Framework[https://developer.apple.com/libra...
    可爱的活火山阅读 9,308评论 0 11
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,497评论 18 139
  • HealthKit框架学习 本文结构 简介 用户数据安全及隐私 HealthKit框架介绍 HealthKit使用...
    奇哥Dodge阅读 3,793评论 4 11
  • [iOS] HealthKit 获取步数 前言 HealthKit 是苹果在 iOS 8.0 之后推出的健康框架,...
    李小六_阅读 1,323评论 0 7
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,497评论 18 399