介紹
使用HealthKit之前先了解讀取數(shù)據(jù)和寫入數(shù)據(jù)時需要用到的幾個關(guān)鍵類:
1洽洁、授權(quán)相關(guān)
- HKHealthStore (判斷是否已經(jīng)獲取授權(quán)、申請權(quán)限)
2、數(shù)據(jù)類型
- HKObjectType (數(shù)據(jù)類型抽象類)
- HKSampleType (繼承HKObjectType存崖,具體數(shù)據(jù)類型類静暂,用來表示身高聊倔、體重晦毙、心率等具體的數(shù)據(jù)類型)
- HKQuantityType (具體數(shù)值類型類)
3、數(shù)據(jù)查詢
- HKQuery (數(shù)據(jù)查詢基類)
- HKSampleQuery (根據(jù)HKSampleType具體數(shù)據(jù)類型耙蔑、NSPredicate篩選见妒、NSSortDescriptor排序查詢數(shù)據(jù))
4、model
- HKObject (數(shù)據(jù)model基類)
- HKSample (繼承HKObject甸陌,記錄數(shù)據(jù)類型须揣、時間等)
- HKQuantitySample (繼承HKSample,記錄HKQuantityType數(shù)值類型類钱豁、HKQuantity數(shù)值類)
- HKQuantity (數(shù)值類)
獲取授權(quán)
1耻卡、創(chuàng)建證書時,勾選Health項
2牲尺、項目中:targets --> Capabilities --> HealthKit
3卵酪、代碼
//導(dǎo)入頭文件
#import <HealthKit/HealthKit.h>
//使用前,先判斷是否授權(quán)
+ (BOOL)isHealthDataAvailable;
/*
申請權(quán)限
shareTypes :數(shù)據(jù)寫入權(quán)限
readTypes :數(shù)據(jù)讀取權(quán)限
**/
- (void)requestAuthorizationToShareTypes:(nullable NSSet<HKSampleType *> *)typesToShare
readTypes:(nullable NSSet<HKObjectType *> *)typesToRead
completion:(void (^)(BOOL success, NSError * _Nullable error))completion;
//使用
if (!self.healthStore) {
self.healthStore = [[HKHealthStore alloc] init];
}
HKQuantityType *heightType = [HKObjectType quantityTypeForIdentifier:HKQuantityTypeIdentifierHeight];
NSSet *typesSet = [NSSet setWithObjects:heightType, nil];
//申請身高的讀取和寫入權(quán)限
[self.healthStore requestAuthorizationToShareTypes:typesSet readTypes:typesSet completion:^(BOOL success, NSError * _Nullable error) {
if (success) {
//獲得權(quán)限之后谤碳,讀取數(shù)據(jù)
[self readData];
} else {
//您可以在設(shè)置--隱私--健康中允許應(yīng)用讀取健康數(shù)據(jù)
}
}];
數(shù)據(jù)讀取
- (void)readData {
//身高 CM
HKSampleType *heightType = [HKQuantityType quantityTypeForIdentifier:HKQuantityTypeIdentifierHeight];
//NSSortDescriptor用來對數(shù)據(jù)進(jìn)行排序
NSSortDescriptor *start = [NSSortDescriptor sortDescriptorWithKey:HKSampleSortIdentifierStartDate ascending:NO];
NSSortDescriptor *end = [NSSortDescriptor sortDescriptorWithKey:HKSampleSortIdentifierEndDate ascending:NO];
//此處按時間篩選 開始時間到結(jié)束時間溃卡,自定義
NSDate *date = [NSDate date];
NSPredicate *predicate = [HKQuery predicateForSamplesWithStartDate:date endDate:date options:(HKQueryOptionNone)];
HKSampleQuery *sampleQuery = [[HKSampleQuery alloc] initWithSampleType:type predicate:predicate limit:HKObjectQueryNoLimit sortDescriptors:@[start, end] resultsHandler:^(HKSampleQuery * _Nonnull query, NSArray<__kindof HKSample *> * _Nullable results, NSError * _Nullable error) {
//循環(huán)獲取得到的數(shù)據(jù)
for (int i = 0; i < results.count; i ++) {
//把結(jié)果轉(zhuǎn)換為字符串類型
HKQuantitySample *result = results[i];
HKQuantity *quantity = result.quantity;
//此處可以輸出quantity數(shù)據(jù) (帶單位信息)
NSLog(@"quantity = %@", quantity);
//通過單位解析值類型,這里需要獲取以CM為單位的身高數(shù)據(jù)蜒简,所以單位信息為[HKUnit meterUnitWithMetricPrefix:HKMetricPrefixCenti]
//單位信息可參照HKUnit類瘸羡,文章下面有簡單介紹
CGFloat value = [quantity doubleValueForUnit:[HKUnit meterUnitWithMetricPrefix:HKMetricPrefixCenti]];
}
}];
//******執(zhí)行查詢******
[self.healthStore executeQuery:sampleQuery];
}
關(guān)于數(shù)據(jù)單位HKUnit
HKUnit中有豐富的數(shù)據(jù)單位類型:
Mass Units 質(zhì)量單位
Length Units 長度單位
Volume Units 體積單位
Pressure Units 壓力單位
Time Units 時間單位
Energy Units 能量單位
Temperature Units 溫度單位
Electrical Conductance Units 電導(dǎo)率單位
Pharmacology Units 藥理學(xué)單位
Scalar Units 標(biāo)量單位(包括百分比)
HKMetricPrefix 枚舉類型 10^-12 ~ 10^12
例子:
①身高 -- CM
//以米為單位:
[HKUnit meterUnit]
//以厘米為單位(是在以米為單位的基礎(chǔ)上計算,所以使用10^-2):
[HKUnit meterUnitWithMetricPrefix:HKMetricPrefixCenti]
②體重 -- KG
//以千克為單位
[HKUnit gramUnitWithMetricPrefix:(HKMetricPrefixKilo)]
③BMI -- count
//float類型
[HKUnit countUnit]
④體脂肪率 -- %
//百分比單位
[HKUnit percentUnit]
⑤血壓收縮壓 -- mmHg
[HKUnit millimeterOfMercuryUnit]
⑥安靜心率 -- count/min
//心率是一分鐘多少次搓茬,沒有具體的單位犹赖,所以可以直接使用字符串來構(gòu)造單位
//在查詢結(jié)果回調(diào)中 輸出HKQuantity可以查看到單位信息
[HKUnit unitFromString:@"count/min"]
⑦最大肺活量 -- ML
//默認(rèn)是公升為單位,這里要獲取毫升單位垮兑,所以使用10^-3
[HKUnit literUnitWithMetricPrefix:HKMetricPrefixMilli]
關(guān)于HKSampleType樣本類型
- 身體測量
1. HKQuantityTypeIdentifierBodyMassIndex 身高體重指數(shù)
2. HKQuantityTypeIdentifierBodyFatPercentage 體脂率
3. HKQuantityTypeIdentifierHeight 身高
4. HKQuantityTypeIdentifierBodyMass 體重
5. HKQuantityTypeIdentifierLeanBodyMass 去脂體重
- 健身數(shù)據(jù)
1. HKQuantityTypeIdentifierStepCount 步數(shù)
2. HKQuantityTypeIdentifierDistanceWalkingRunning 步行+跑步距離
3. HKQuantityTypeIdentifierDistanceCycling 騎車距離
4. HKQuantityTypeIdentifierBasalEnergyBurned 靜息能量
5. HKQuantityTypeIdentifierActiveEnergyBurned 活動能量
6. HKQuantityTypeIdentifierFlightsClimbed 已爬樓層
//不允許share
7. HKQuantityTypeIdentifierNikeFuel NikeFuel
8. HKQuantityTypeIdentifierAppleExerciseTime 鍛煉分鐘數(shù)健身數(shù)據(jù)
- 主要特征
1. HKQuantityTypeIdentifierHeartRate 心率
2. HKQuantityTypeIdentifierBodyTemperature 體溫
3. HKQuantityTypeIdentifierBasalBodyTemperature 基礎(chǔ)體溫
4. HKQuantityTypeIdentifierBloodPressureSystolic 收縮壓
5. HKQuantityTypeIdentifierBloodPressureDiastolic 舒張壓
6. HKQuantityTypeIdentifierRespiratoryRate 呼吸速率
- 數(shù)據(jù)結(jié)果
1. HKQuantityTypeIdentifierOxygenSaturation 血氧飽和度
2. HKQuantityTypeIdentifierPeripheralPerfusionIndex 末梢灌注指數(shù)
3. HKQuantityTypeIdentifierBloodGlucose 血糖
4. HKQuantityTypeIdentifierNumberOfTimesFallen 摔倒次數(shù)
5. HKQuantityTypeIdentifierElectrodermalActivity 皮電活動
6. HKQuantityTypeIdentifierInhalerUsage 吸入劑用量
7. HKQuantityTypeIdentifierBloodAlcoholContent 血液酒精濃度
8. HKQuantityTypeIdentifierForcedVitalCapacity 最大肺活量|用力肺活量
9. HKQuantityTypeIdentifierForcedExpiratoryVolume1 第一秒用力呼氣量
10.HKQuantityTypeIdentifierPeakExpiratoryFlowRate 呼氣流量峰值
- 營養(yǎng)攝入
1. HKQuantityTypeIdentifierDietaryFatTotal 總脂肪
2. HKQuantityTypeIdentifierDietaryFatPolyunsaturated 多元不飽和脂肪
3. HKQuantityTypeIdentifierDietaryFatMonounsaturated 單元不飽和脂肪
4. HKQuantityTypeIdentifierDietaryFatSaturated 飽和脂肪
5. HKQuantityTypeIdentifierDietaryCholesterol 膳食膽固醇
6. HKQuantityTypeIdentifierDietarySodium 鈉
7. HKQuantityTypeIdentifierDietaryCarbohydrates 碳水化合物
8. HKQuantityTypeIdentifierDietaryFiber 纖維
9. HKQuantityTypeIdentifierDietarySugar 膳食糖
10.HKQuantityTypeIdentifierDietaryEnergyConsumed 膳食能量
11.HKQuantityTypeIdentifierDietaryProtein 蛋白質(zhì)
12.HKQuantityTypeIdentifierDietaryVitaminA 維生素 A
13.HKQuantityTypeIdentifierDietaryVitaminB6 維生素 B6
14.HKQuantityTypeIdentifierDietaryVitaminB12 維生素 B12
15.HKQuantityTypeIdentifierDietaryVitaminC 維生素 C
16.HKQuantityTypeIdentifierDietaryVitaminD 維生素 D
17.HKQuantityTypeIdentifierDietaryVitaminE 維生素 E
18.HKQuantityTypeIdentifierDietaryVitaminK 維生素 K
19.HKQuantityTypeIdentifierDietaryCalcium 鈣
20.HKQuantityTypeIdentifierDietaryIron 鐵
21.HKQuantityTypeIdentifierDietaryThiamin 硫銨
22.HKQuantityTypeIdentifierDietaryRiboflavin 核黃素
23.HKQuantityTypeIdentifierDietaryNiacin 煙酸
24.HKQuantityTypeIdentifierDietaryFolate 葉酸
25.HKQuantityTypeIdentifierDietaryBiotin 生物素
26.HKQuantityTypeIdentifierDietaryPantothenicAcid 泛酸
27.HKQuantityTypeIdentifierDietaryPhosphorus 磷
28.HKQuantityTypeIdentifierDietaryIodine 碘
29.HKQuantityTypeIdentifierDietaryMagnesium 鎂
30.HKQuantityTypeIdentifierDietaryZinc 鋅
31.HKQuantityTypeIdentifierDietarySelenium 硒
32.HKQuantityTypeIdentifierDietaryCopper 銅
33.HKQuantityTypeIdentifierDietaryManganese 錳
34.HKQuantityTypeIdentifierDietaryChromium 鉻
35.HKQuantityTypeIdentifierDietaryMolybdenum 鉬
36.HKQuantityTypeIdentifierDietaryChloride 氯化物
37.HKQuantityTypeIdentifierDietaryPotassium 鉀
38.HKQuantityTypeIdentifierDietaryCaffeine 咖啡因
39.HKQuantityTypeIdentifierDietaryWater 水
40.HKQuantityTypeIdentifierUVExposure 紫外線指數(shù)
數(shù)據(jù)寫入
以身高為例
#pragma mark - 寫入身高數(shù)據(jù)
//寫入數(shù)據(jù)之前冷尉,注意要先申請寫入權(quán)限
- (void)writeData {
//身高具體數(shù)值類型
HKQuantityType *heightType = [HKQuantityType quantityTypeForIdentifier:HKQuantityTypeIdentifierHeight];
HKQuantity *heightQuantity = [HKQuantity quantityWithUnit:[HKUnit meterUnitWithMetricPrefix:HKMetricPrefixCenti] doubleValue:181];
//當(dāng)前日期
NSDate *today = [NSDate date];
//身高數(shù)值類
HKQuantitySample *heightSample = [HKQuantitySample quantitySampleWithType:heightType quantity:heightQuantity startDate:today endDate:today];
[self.healthStore saveObject:heightSample withCompletion:^(BOOL success, NSError * _Nullable error) {
NSLog(@"write success");
}];
}
文章中漱挎,關(guān)于HKSampleType樣本類型系枪,參考自
蕭雪痕