HealthKit 初试
来源:互联网 发布:热分析软件哪个好 编辑:程序博客网 时间:2024/05/16 23:23
想要做HealthKit,电脑上安装的profile的APP ID 必须包含HealthKit服务。
先来做个测试的。
在developer中新建一个App ID,
选择App ID Suffix —> Explicit APP ID ,一定要输入全名的,不能带*号 —> APP services, 这里一定要勾选 HealthKit,剩下的根据所需一直continue。
然后新建一个作为developer 用的 profile, app id 选刚才新建的那个带有HealthKit的然后按需continue,最后下载下来安装上。
在Xcode中新建一个空工程,先导入HealthKit.framework这个库
打开新工程的targets,在Capabilities中找到
当然刚开始的时候是关闭状态,你要打开它,然后选择下面的 Fix使得上面几项都为“√”
这时候会在目录树中看到:
这说明已经申请成功了Healthkit服务。
在使用服务前,要先检查设备是否支持HealthKit服务
if ([HKHealthStore isHealthDataAvailable]) { self.healthStore = [[HKHealthStore alloc] init]; /* 组装需要读写的数据类型 */ NSSet *writeDataTypes = [self dataTypesToWrite]; NSSet *readDataTypes = [self dataTypesRead]; /* 注册需要读写的数据类型,也可以在“健康”APP中重新修改 */ [self.healthStore requestAuthorizationToShareTypes:writeDataTypes readTypes:readDataTypes completion:^(BOOL success, NSError *error) { if (!success) { NSLog(@"%@\n\n%@",error, [error userInfo]); return ; } else { dispatch_async(dispatch_get_main_queue(), ^{ [self.window.rootViewController presentViewController:tabVC animated:YES completion:nil]; }); } }]; }
- (NSSet *)dataTypesToWrite{ HKQuantityType *heightType = [HKObjectType quantityTypeForIdentifier:HKQuantityTypeIdentifierHeight]; HKQuantityType *weightType = [HKObjectType quantityTypeForIdentifier:HKQuantityTypeIdentifierBodyMass]; HKQuantityType *temperatureType = [HKQuantityType quantityTypeForIdentifier:HKQuantityTypeIdentifierBodyTemperature]; return [NSSet setWithObjects:heightType, temperatureType, weightType, nil];}- (NSSet *)dataTypesRead{ HKQuantityType *heightType = [HKObjectType quantityTypeForIdentifier:HKQuantityTypeIdentifierHeight]; HKQuantityType *weightType = [HKObjectType quantityTypeForIdentifier:HKQuantityTypeIdentifierBodyMass]; HKQuantityType *temperatureType = [HKObjectType quantityTypeForIdentifier:HKQuantityTypeIdentifierBodyTemperature]; HKCharacteristicType *birthdayType = [HKObjectType characteristicTypeForIdentifier:HKCharacteristicTypeIdentifierDateOfBirth]; HKCharacteristicType *sexType = [HKObjectType characteristicTypeForIdentifier:HKCharacteristicTypeIdentifierBiologicalSex]; return [NSSet setWithObjects:heightType, temperatureType,birthdayType,sexType,weightType, nil];}
如果正常的情况,会在启动的时候弹出一个窗口提示请求服务
可以提示用户自己选择同意APP读写的数据类型。
一般数据的保存:
- (void)saveTemperatureIntoHealthStore:(double)temperature{ /* 要保存的数据类型 对于温度、体重都有不同的显示方式 比如温度: @interface HKUnit (Temperature) + (instancetype)degreeCelsiusUnit; // degC + (instancetype)degreeFahrenheitUnit; // degF + (instancetype)kelvinUnit; // K @end */ HKUnit *temperatureUnit; if (_unitSeg.selectedSegmentIndex == 0) { temperatureUnit = [HKUnit degreeCelsiusUnit]; } else { temperatureUnit = [HKUnit degreeFahrenheitUnit]; } /* HKQuantity 将要保存的数据转换成 HealthKit 中通用的数据模型 */ HKQuantity *temperatureQuantity = [HKQuantity quantityWithUnit:temperatureUnit doubleValue:temperature]; /* HKQuantityType 要将HKQuantity保存到的健康数据类型,比如体温、体重、身高等………… */ HKQuantityType *temperatureType = [HKQuantityType quantityTypeForIdentifier:HKQuantityTypeIdentifierBodyTemperature]; /* 保存数据的时间,开始和结束,为了实时保存就都为同一个时间 */ NSDate *date = [NSDate date]; HKQuantitySample *temperatureSample = [HKQuantitySample quantitySampleWithType:temperatureType quantity:temperatureQuantity startDate:date endDate:date]; /* 调用 apple 的接口保存数据 */ [SHAREAPP.healthStore saveObject:temperatureSample withCompletion:^(BOOL success, NSError *error) { if (!success) { NSLog(@"\n**************************\n %@ \n\n%@\n\n%@\n**************************",NSStringFromSelector(_cmd),error, [error userInfo]); abort(); } else [self updateUserTemperature]; }];}
对于生理性别、生日、血型,则不能让用户写入,只提供读取操作。
对于出生日期的读取,只是一句话,然后需要自己计算
NSError *error; NSDate *dateOfBirth = [SHAREAPP.healthStore dateOfBirthWithError:&error];
对于性别的 读取
NSError *error ; HKBiologicalSexObject *sexObject = [SHAREAPP.healthStore biologicalSexWithError:&error];
使用
sexObject.biologicalSex获取性别信息,这是一个枚举值
typedef NS_ENUM(NSInteger, HKBiologicalSex) { HKBiologicalSexNotSet = 0, HKBiologicalSexFemale, HKBiologicalSexMale,} NS_ENUM_AVAILABLE_IOS(8_0);
对于其他数据的读取
需要提供读取的生理数据类型
HKQuantityType *weightType = [HKQuantityType quantityTypeForIdentifier:HKQuantityTypeIdentifierBodyMass];然后直接类似的coredata的query
- (void)appl_mostRecentQuantitySampleOfType:(HKQuantityType *)quantityType predicate:(NSPredicate *)predicate completions:(void (^)(NSArray *, NSError *))completion{ NSSortDescriptor *timeSortDescriptor = [[NSSortDescriptor alloc] initWithKey:HKSampleSortIdentifierEndDate ascending:NO]; HKSampleQuery *query = [[HKSampleQuery alloc] initWithSampleType:quantityType predicate:nil limit:HKObjectQueryNoLimit sortDescriptors:@[timeSortDescriptor] resultsHandler:^(HKSampleQuery *query, NSArray *results, NSError *error) { if (!results) { if (completion) { completion(nil, error); } return ; } if (completion) { completion(results, error); } }]; [self executeQuery:query];}
返回的数组中都是 HKQuantitySample 类型的生理数据的实例,包含着数据的类型和这个数据的量值与计量单位(HKQuantity)
HKQuantity数据不能直接使用,需要进行转换。
先定义一个数据类型:
HKUnit *heightUnit = [HKUnit inchUnit];然后转换
double usersHeight = [quantity doubleValueForUnit:heightUnit];
此时的数据就能按需来正常使用了。
但是需要注意的是:
在保存的时候注意数据的单位,读的时候更要注意。
0 0
- HealthKit 初试
- HealthKit
- 初试
- 初试
- 初试
- 初试
- healthkit简介
- healthKit的一些知识点
- HealthKit框架指南
- The HealthKit Framework
- HealthKit的那些事
- HealthKit 框架体系
- HealthKit框架参考
- iOS 8 HealthKit 介绍
- HealthKit框架指南
- ios开发之HealthKit
- healthkit框架使用
- ios HealthKit框架参考
- web.xml deployment-descriptor
- Linux:删除内核
- CCF NOIP2014前的复习(10.20)
- 通过个人介绍,侧面谈下自己操作过的一个项目
- 我的RUBY之路--安装Ubuntu 14.04分区/ rbenv、ruby、rails开发环境搭建
- HealthKit 初试
- Oracle 管理回滚或者撤销数据
- 果冻新闻的项目,虽然很难,但是,还是坚持下来
- 广度/宽度优先搜索(BFS)
- 获取sqlserver连接项的简便方法及QTP连接数据库
- Swift跨region数据迁移问题
- 还有一个聊天客户端的项目,让我深深的认识了自己
- 异常:org.dom4j.DocumentException: 2字节的UTF-8序列的2无效
- ios 实现抽屉功能