欢迎关注
最酷最in的云资讯

Health Kit 在IOS上的应用

我们应用内可能会应用苹果自带的健康来读取一些数据,如:每日的步数、活动能量、游泳距离等等。
首先介绍一下 HealthKit, HealthKit是Apple公司在推出iOS 8 系统时一块推出的关于健康信息的框架。如果iPhone手机系统升级到iOS8之后就会发现多了一个健康-app,这就是Apple提供的一个记录用户健康信息的app,可以用它来分享健康和健身数据。还可以指定数据的来源,比如我们自己创建一个app,在我们的app中使用了HealthKit框架之后只要经过用户的认证,就可以在我们的app之中给健康分享数据或者从健康中获取数据。
HealthKit可以与健身设备一起工作,iPhone手机自身可以监控步数信息,会自动导入步数信息。但是其他信息或者设备需要配套的应该才能获取到数据并导入到HealthKit中并在健康中显示。
HealthKit不能再iPad中使用,而且它也不支持扩展。
其次,我们说一下如何使用 HealthKit。

1、在应用中打开 HealthKit功能

Health Kit 在IOS上的应用

打开HealthKit功能

2、在info.plist文件中申请key

Health Kit 在IOS上的应用权限申请

读取权限 :

Privacy - Health Share Usage Description

写入权限:

Privacy - Health Update Usage Description

3、导入#import 框架

4、应用授权

 //HealthKit中的管理者 HKHealthStore *store = [[HKHealthStore alloc] init]; //访问权限类型 HKQuantityType *quType = [HKObjectType quantityTypeForIdentifier:HKQuantityTypeIdentifierStepCount];NSSet *set = [NSSet setWithObject:quType]; //参数一是写入操作。参数二是读取操作 [store requestAuthorizationToShareTypes:set readTypes:set completion:^(BOOL success, NSError * _Nullable error) {    NSLog(@"success == %d ,error == %@" , success , error);}];

上面的授权仅仅是可以访问步数,其他的授权还有这些:

1)、数量样本(HKQuantityType)

调用方法 :

[HKObjectType quantityTypeForIdentifier:HKQuantityTypeIdentifierStepCount];
  • 身体测量

    1. HKQuantityTypeIdentifierBodyMassIndex  身高体重指数2. HKQuantityTypeIdentifierBodyFatPercentage 体脂率3. HKQuantityTypeIdentifierHeight 身高4. HKQuantityTypeIdentifierBodyMass 体重5. HKQuantityTypeIdentifierLeanBodyMass 去脂体重

*健身数据

 1. HKQuantityTypeIdentifierStepCount   步数 2. HKQuantityTypeIdentifierDistanceWalkingRunning  步行+跑步距离 3. HKQuantityTypeIdentifierDistanceCycling  骑车距离 4.HKQuantityTypeIdentifierDistanceWheelchair  轮椅距离 5. HKQuantityTypeIdentifierBasalEnergyBurned  静息能量 6. HKQuantityTypeIdentifierActiveEnergyBurned  活动能量 7. HKQuantityTypeIdentifierFlightsClimbed    已爬楼层 8. HKQuantityTypeIdentifierNikeFuel     NikeFuel 9. HKQuantityTypeIdentifierAppleExerciseTime  锻炼分钟数健身数据 10.HKQuantityTypeIdentifierDistanceSwimming  游泳距离 11.HKQuantityTypeIdentifierSwimmingStrokeCount 游泳冲刺次数

*主要特征

  1. HKQuantityTypeIdentifierHeartRate 心率  2. HKQuantityTypeIdentifierBodyTemperature  体温  3. HKQuantityTypeIdentifierBasalBodyTemperature 基础体温  4. HKQuantityTypeIdentifierBloodPressureSystolic  收缩压  5. HKQuantityTypeIdentifierBloodPressureDiastolic  舒张压  6. HKQuantityTypeIdentifierRespiratoryRate  呼吸速率

*数据结果

  1. HKQuantityTypeIdentifierOxygenSaturation  血氧饱和度  2. HKQuantityTypeIdentifierPeripheralPerfusionIndex 末梢灌注指数  3. HKQuantityTypeIdentifierBloodGlucose 血糖  4. HKQuantityTypeIdentifierNumberOfTimesFallen 摔倒次数  5. HKQuantityTypeIdentifierElectrodermalActivity  皮电活动  6. HKQuantityTypeIdentifierInhalerUsage 吸入剂用量  7. HKQuantityTypeIdentifierBloodAlcoholContent  血液酒精浓度  8. HKQuantityTypeIdentifierForcedVitalCapacity  最大肺活量|用力肺活量  9. HKQuantityTypeIdentifierForcedExpiratoryVolume1 第一秒用力呼气量  10.HKQuantityTypeIdentifierPeakExpiratoryFlowRate 呼气流量峰值

*营养摄入

  1. HKQuantityTypeIdentifierDietaryFatTotal 总脂肪  2. HKQuantityTypeIdentifierDietaryFatPolyunsaturated  多元不饱和脂肪  3. HKQuantityTypeIdentifierDietaryFatMonounsaturated 单元不饱和脂肪  4. HKQuantityTypeIdentifierDietaryFatSaturated 饱和脂肪  5. HKQuantityTypeIdentifierDietaryCholesterol 膳食胆固醇  6. HKQuantityTypeIdentifierDietarySodium 钠  7. HKQuantityTypeIdentifierDietaryCarbohydrates 碳水化合物  8. HKQuantityTypeIdentifierDietaryFiber 纤维  9. HKQuantityTypeIdentifierDietarySugar 膳食糖  10.HKQuantityTypeIdentifierDietaryEnergyConsumed  膳食能量  11.HKQuantityTypeIdentifierDietaryProtein 蛋白质  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 紫外线指数

2)、类别样本(HKCategoryType)

调用方法:

[HKObjectType categoryTypeForIdentifier:HKCategoryTypeIdentifierSleepAnalysis];

*生殖健康

 1. HKCategoryTypeIdentifierSleepAnalysis 睡眠分析 2.HKCategoryTypeIdentifierAppleStandHour 站立小时 3. HKCategoryTypeIdentifierCervicalMucusQuality 宫颈粘液质量 4. HKCategoryTypeIdentifierOvulationTestResult 排卵测试结果 5. HKCategoryTypeIdentifierMenstrualFlow 月经 6. HKCategoryTypeIdentifierIntermenstrualBleeding 点滴出血 7. HKCategoryTypeIdentifierSexualActivity 性行为 8.HKCategoryTypeIdentifierMindfulSession 正念分钟数

3)、特征样本(HKCharacteristicType)

调用方法:

[HKObjectType characteristicTypeForIdentifier:HKCharacteristicTypeIdentifierBiologicalSex];

*本人信息

  1. HKCharacteristicTypeIdentifierBiologicalSex 性别   2. HKCharacteristicTypeIdentifierBloodType 血型   3. HKCharacteristicTypeIdentifierDateOfBirth 出生日期  4. HKCharacteristicTypeIdentifierFitzpatrickSkinType 日光反应型皮肤类型

4)、 Correlation(HKCorrelationType)

调用方法:

[HKObjectType correlationTypeForIdentifier:HKCorrelationTypeIdentifierBloodPressure];

*样本类型不允许share和read(枚举)

//不允许share And read1.HKCorrelationTypeIdentifierBloodPressure 血压   2.HKCorrelationTypeIdentifierFood 食物

5)、Document(HKDocumentType)

调用方法:

[HKObjectType documentTypeForIdentifier:HKDocumentTypeIdentifierCDA];     1.HKDocumentTypeIdentifierCDA 健康记录请求

6). Workout(HKWorkoutType)

调用方法:

[HKObjectType workoutType];

7). activitySummaryType(健身记录)获取

调用方法:

[HKObjectType activitySummaryType];

5、使用

访问数据:

HKQuantityType * quantityType  = [HKQuantityType quantityTypeForIdentifier:HKQuantityTypeIdentifierStepCount];    //设置访问步数HKHealthStore *healthStore = [[HKHealthStore alloc] init];NSPredicate *predicate              = [HKQuery predicateForSamplesWithStartDate:nil endDate:nil options:HKQueryOptionStrictStartDate];NSSortDescriptor *sortDescriptor    = [NSSortDescriptor sortDescriptorWithKey:HKSampleSortIdentifierStartDate ascending:YES];HKSampleQuery *sampleQuery          = [[HKSampleQuery alloc] initWithSampleType:sampleType predicate:predicate limit:HKObjectQueryNoLimit sortDescriptors:@[sortDescriptor] resultsHandler:^(HKSampleQuery *query, NSArray *results, NSError *error) {    if(!error && results) {        for(HKQuantitySample *samples in results) {            NSLog(@"stepCount = %@ startDate = %@ endDate=%@" , samples.quantity , samples.startDate,samples.endDate);        }    }}];[healthStore executeQuery:sampleQuery];

写入数据:

HKUnit *unit = [HKUnit countUnit];HKQuantityType *quantityType = [HKObjectType quantityTypeForIdentifier:HKQuantityTypeIdentifierStepCount];HKQuantity *quantity    = [HKQuantity quantityWithUnit:unit doubleValue:number];HKQuantitySample *quantitySample = [HKQuantitySample quantitySampleWithType:quantityType quantity:quantity startDate:startDate endDate:endDate];HKHealthStore *healthStore = [[HKHealthStore alloc] init];[healthStore saveObject:quantitySample  withCompletion:^(bool success, NSError *error){    block(success, error);}];

具体的做法与封装我已经放入git上,如果有需要可以下载看看,git项目地址:https://github.com/zhangyqyx/HealthKit
最近手机更新了ios12和Xcode10 出现了个奇特的bug ,授权的时候老是闪退,并一直提醒

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'NSHealthShareUsageDescription must be set in the app's Info.plist in order to request read authorization for the following types: HKQuantityTypeIdentifierStepCount'

试试问题万能解决大法—重启Xcode,依然无果
那用排除法,老代码新问题,找了个ios11的机器跑了代码试了下,果然没问题.
一边自己试验各种办法,一边baidu,google找方法,结果大多都是老的帖子讲添加权限字段在info里就好.
最后,翻到jinrui_w云微帖子将info.plist中权限描述,改为英语才好使

Health Kit 在IOS上的应用

修改英文

貌似随便写英语也不好使,我试过要包含visit read “health”才好使
目前按此方法已解决,如有更好的办法,请指正

希望大家能提出宝贵的意见,可以给我留言,也可以发邮件到我的邮箱:namezyqyx@163.com
谢谢大家,如果你有更好的想法或文章请告知,不胜感激。
参考文章:
HealthKit框架参考:http://www.cocoachina.com/ios/20140915/9624.html
HealthKit开发教程Swift版:http://www.cocoachina.com/swift/20150122/10998.html
The HealthKit Framework:https://developer.apple.com/reference/healthkit#//apple_ref/doc/uid/TP40014707

作者:谁遇而安
链接:https://www.swifty.cc/p/f2f4a89cf4ed

赞(0) 打赏
未经允许不得转载:云微资讯 » Health Kit 在IOS上的应用
分享到: 更多 (0)

云微资讯 科技新媒体资讯平台

关于我们联系我们

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏