最近项目需要,可能需要在原有的自行车APP上添加healthkit框架,所以就查看了一些healthkit的资料,发现code4APP竟然没有,github上面的资料也比较少,还有不少用swift写的,自己就研究用oc写healthkit。比较3月21号的苹果发布会虽然出了se手机并不出色,但是更加突出了环境和健康,healthkit在未来医疗健康、运动锻炼领域应该会大有所为。

1、要使用healthkit框架首先要在capabilities里面打开health kit

2、判断设备是否能够使用healthkit框架

- (BOOL)isHealthDataAvailable{

return [HKHealthStore isHealthDataAvailable];

}

3、请求授权设置,所有的设备要请求授权成功后才能进行使用healthkit的方法操作

//一组包含要共享的数据类型,可以写入的数据

NSSet *shareObjectTypes = [NSSet setWithObjects:

//[HKObjectType quantityTypeForIdentifier:HKQuantityTypeIdentifierDistanceWalkingRunning],

//[HKObjectType quantityTypeForIdentifier:HKQuantityTypeIdentifierStepCount],

[HKObjectType quantityTypeForIdentifier:HKQuantityTypeIdentifierDistanceCycling],

nil];

//一组包含要读取的数据类型,可以读取的数据

NSSet *readObjectTypes  = [NSSet setWithObjects:

//[HKObjectType characteristicTypeForIdentifier:HKCharacteristicTypeIdentifierDateOfBirth],

[HKObjectType characteristicTypeForIdentifier:HKCharacteristicTypeIdentifierBiologicalSex],

//[HKObjectType quantityTypeForIdentifier:HKQuantityTypeIdentifierStepCount],

[HKObjectType quantityTypeForIdentifier:HKQuantityTypeIdentifierDistanceCycling],

//[HKObjectType quantityTypeForIdentifier:HKQuantityTypeIdentifierDistanceWalkingRunning],

[HKObjectType quantityTypeForIdentifier:HKQuantityTypeIdentifierBodyMass],

[HKObjectType quantityTypeForIdentifier:HKQuantityTypeIdentifierHeight],

nil];

// Request access

[self.healthStore requestAuthorizationToShareTypes:shareObjectTypes

readTypes:readObjectTypes

completion:^(BOOL success, NSError *error) {

if(success == YES)

{

NSLog(@">>>>>授权成功");

}

else

{

NSLog(@">>>>>授权失败");

NSLog(@"error = %@",error);

}

}];

4、读取数据

读取性别

HKBiologicalSexObject *bioSex = [_healthStore biologicalSexWithError:&error];

NSString *sexString;

switch ((int)bioSex.biologicalSex) {

case HKBiologicalSexNotSet:

sexString = @"NotSet";

break;

case HKBiologicalSexFemale:

sexString = @"Female";

break;

case HKBiologicalSexMale:

sexString = @"Male";

break;

case HKBiologicalSexOther:

sexString = @"Other";

break;

default:

break;

读取身高 ,创建好请求类型,其中要注意请求回来的数据是一组数字,可以设置请求数据的起始时间,例子中请求的是身高,请求回结果后我取得是最后一位,最后需要注意把单位换算,转换成需要的数据的类型,如meterUnit, 如果是体重就是克,可以用gramUnit

HKSampleType *sampleType = [HKSampleType quantityTypeForIdentifier:HKQuantityTypeIdentifierHeight];

NSDate *startDate, *endDate;

NSPredicate *predicate = [HKQuery predicateForSamplesWithStartDate:startDate endDate:endDate options:HKQueryOptionStrictStartDate];

NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:HKSampleSortIdentifierStartDate ascending:YES];

HKSampleQuery *sampleQuery = [[HKSampleQuery alloc] initWithSampleType:sampleType predicate:predicate limit:HKObjectQueryNoLimit sortDescriptors:@[sortDescriptor]resultsHandler:^(HKSampleQuery * _Nonnull query, NSArray<__kindof HKSample *> * _Nullable results, NSError * _Nullable error) {

if (!error && results) {

HKQuantitySample *samples = [results lastObject];

double heightMeter = [samples.quantity doubleValueForUnit:[HKUnit meterUnit]];

if (self.delegate && [self.delegate respondsToSelector:@selector(receiveHealthKitHeight:)]) {

[self.delegate receiveHealthKitHeight:heightMeter];

}

}

}];

//使函数生效

[_healthStore executeQuery:sampleQuery];

5、写入数据,其中以写入骑行数据为例,注意创建时间时用[NSDate dateWithTimeIntervalSinceNow:0],这是结束时间,开始时间可以以当前时间为截点,向前推

[NSDate dateWithTimeIntervalSinceNow:-time],请求返回的数据要设置,是枚举类型,11是meter。

NSDate *startDate, *endDate;

endDate = [NSDate dateWithTimeIntervalSinceNow:0];

startDate = [NSDate dateWithTimeIntervalSinceNow:-time];

NSLog(@"startdate = %@, endDate = %@",startDate,endDate);

NSString *unitIdentifier = HKQuantityTypeIdentifierDistanceCycling;

HKQuantityType *quantityTypeIdentifier = [HKObjectType quantityTypeForIdentifier:unitIdentifier];

HKQuantity *quantity = [HKQuantity quantityWithUnit:[HKUnit unitFromLengthFormatterUnit:11] doubleValue:length];

HKQuantitySample *temperatureSample2 = [HKQuantitySample quantitySampleWithType:quantityTypeIdentifier quantity:quantity startDate:startDate endDate:endDate metadata:nil];

HKHealthStore *store = [[HKHealthStore alloc] init];

[store saveObject:temperatureSample2 withCompletion:^(BOOL success, NSError *error) {

if (success) {

NSLog(@"保存成功");

}else {

NSLog(@"保存失败");

}

}];

下面是代码github的链接https://github.com/WadeZhanggp/Healthkit-Demo

healthkit框架使用相关推荐

  1. HealthKit开发快速入门教程之HealthKit框架体系创建健康AppID

    HealthKit开发快速入门教程之HealthKit框架体系创建健康AppID HealthKit开发准备工作 在开发一款HealthKit应用程序时,首先需要讲解HealthKit中有哪些类,在i ...

  2. iOS利用HealthKit框架从健康app中获取步数信息

    微信和QQ的每日步数最近十分火爆,我就想为自己写的项目中添加一个显示每日步数的功能,上网一搜好像并有相关的详细资料,自己动手丰衣足食. 统计步数信息并不需要我们自己去实现,iOS自带的健康app已经为 ...

  3. iOS 使用HealthKit框架实现获取今日步数

    Demo地址:我的github仓库 HealthKit hey!宝宝又来更新博客了! 今天早上查看天气,发现自己缺少一个查看天气的APP, 于是下载了一个"墨迹天气",结果宝宝在欣 ...

  4. HealthKit 框架详细解析

    HealthKit框架详细解析(一) -- 基本概览(一) HealthKit框架详细解析(二) -- 基本概览(二)

  5. HealthKit 框架体系

    对于一类应用程序来说,要进行开发,首先需要熟悉它的框架体系,即类.以下我们针对 HealthKit 中所使用的类进行了总结,如表 1-1 所示. 表 1-1 HealthKit框架体系 类 功能 NS ...

  6. 浅谈一下HealthKit框架使用注意点

    日常我们都会接触到上传步数参加各种APP的活动,来赢取虚拟货币或者实物奖品.于是我对此发生了浓厚的兴趣,决定对APP获取步数的原理进行研究. 简单说一下什么是HealthKit.就是苹果在IOS8系统 ...

  7. ​HealthKit开发快速入门教程大学霸内部教程

    ​HealthKit开发快速入门教程大学霸内部教程 ​ ​ 国内第一本HealthKit专向教程.本教程详细讲解iOS中,如何使用HealthKit框架开发健康应用.最后,本教程结合HealthKit ...

  8. iOS Healthkit 使用探索分析

    一 基本认知层面: HealthKit框架提供了一个结构,应用可以使用它来分享健康和健身数据.HealthKit管理从不同来源获得的数据,并根据用户的偏好设置,自动将不同来源的所有数据合并起来.应用还 ...

  9. iOS中 HeathKit框架学习 步数统计等 韩俊强的博客

    每日更新关注:http://weibo.com/hanjunqiang  新浪微博!iOS开发者交流QQ群: 446310206 HeathKit框架学习 本文结构 简介 用户数据安全及隐私 Heat ...

  10. HealthKit开发教程Swift版:起步

    (原文:HealthKit Tutorial with Swift: Getting Started 作者:Ernesto García 译者:Mr_cyz ) HealthKit是iOS 8中的新的 ...

最新文章

  1. (转帖)数据库时代的终结
  2. JS高级进阶之ECMAScript 常见面试题
  3. jdk1.8_googleV3免费下载(API中文文档)
  4. HashMap源码解释
  5. 使用加速度计进行崩溃检测
  6. html5d调用百度语音,易语言调用百度语音平台实现文字转换语音功能的代码
  7. 20一个自定义集合的自述
  8. 完美C++(第5版)(双色)
  9. opensuse 安装 Anaconda3 之后出现Could not start d-bus. Can you call qdbus?
  10. 闲置域名解析到自己的博客
  11. win7无法连接WIFI,安装无线驱动 AR9485 WIFI Driver for Windows 7 (32-bit, 64-bit)
  12. 安装java8和tomcat_jdk1.8.0+tomcat8.0安装
  13. 素数筛(筛选法求素数)
  14. VoLTE的基本介绍
  15. Codeforces Round #606 (Div. 2) A ~ C
  16. CSP 复赛注意事项
  17. 第九章:Android开发之Service
  18. 面向制造和装配的产品设计指南 Ch.2 学习笔记
  19. CLR/CIL/CTS/CLI/BCL/FCL
  20. 【H5】 两种屏幕宽度大小自适应方式

热门文章

  1. 为Linux安装虚拟PDF打印机
  2. Scanf 用法和注意事项
  3. 2048小游戏(Java)源码解析及源代码打包
  4. 单片机简易数字钟c语言程序,用AT89C51/AT89S52单片机制作的简易数字钟
  5. 靶机渗透练习06-driftingblues6 (利用脏牛提权)
  6. 计算机丢失d3dx935.dll,d3dx943.dll丢失的解决方法
  7. HPZ420 工作站主板图
  8. 举例 微积分 拉格朗日方程_(完整word版)拉格朗日方程的应用及举例08讲
  9. C++入侵电脑远程控制,体验一把做黑客的感觉!
  10. 远程网络教学系统用例图