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