iOS 获取步数等健康信息
导入HealthKit.framework
info.plist中添加权限配置
<!-- 健康分享 -->
<key>NSHealthShareUsageDescription</key>
<string>App需要您的同意,才能访问健康分享</string>
capabilities里面打开HealthKit
此外打包证书也需要勾选苹果健康选项
引入#import<HealthKit/HealthKit.h>
属性
{HKHealthStore *store;
}@property (nonatomic, strong) NSMutableArray *healthSteps;//步数
@property (nonatomic, strong) NSMutableArray *healthCalories;//卡路里
@property (nonatomic, strong) NSMutableArray *healthDistances;//距离
在viewDidLoad里面进行初始化及苹果认证
self.healthSteps = [NSMutableArray array];self.healthDistances = [NSMutableArray array];self.healthCalories = [NSMutableArray array];NSSet *getData;// 1.判断设备是否支持HealthKit框架if ([HKHealthStore isHealthDataAvailable]) {getData = [self getData];} else {NSLog(@"---------不支持 HealthKit 框架");}store = [[HKHealthStore alloc] init];// 2.请求苹果健康的认证[store requestAuthorizationToShareTypes:nil readTypes:getData completion:^(BOOL success, NSError * _Nullable error) {if (!success) {NSLog(@"--------请求苹果健康认证失败");return ;}dispatch_async(dispatch_get_main_queue(), ^{// 3.获取苹果健康数据[self getHealthStepData];[self getHealthDistanceData];});}];
设置好要获取的数据类型
- (NSSet *)getData{HKQuantityType *step = [HKQuantityType quantityTypeForIdentifier:HKQuantityTypeIdentifierStepCount];HKQuantityType *distance = [HKQuantityType quantityTypeForIdentifier:HKQuantityTypeIdentifierDistanceWalkingRunning];return [NSSet setWithObjects:step,distance, nil];
}
- (void)updateStep{NSCalendar *calendar = [NSCalendar currentCalendar];NSDate *now = [NSDate date];NSDateComponents *components = [calendar components:NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay fromDate:now];NSDate *startDate = [calendar dateFromComponents:components];NSDate *endDate = [calendar dateByAddingUnit:NSCalendarUnitDay value:1 toDate:startDate options:0];HKQuantityType *sampleType = [HKQuantityType quantityTypeForIdentifier:HKQuantityTypeIdentifierStepCount];NSPredicate *predicate = [HKQuery predicateForSamplesWithStartDate:startDate endDate:endDate options:HKQueryOptionStrictStartDate];HKStatisticsQuery *query = [[HKStatisticsQuery alloc] initWithQuantityType:sampleType quantitySamplePredicate:predicate options:HKStatisticsOptionCumulativeSum completionHandler:^(HKStatisticsQuery *query, HKStatistics *result, NSError *error) {// if (!result) {// if (completionHandler) {// completionHandler(0.0f, error);// }// return;// }double totalStep = [result.sumQuantity doubleValueForUnit:[HKUnit countUnit]];NSLog(@" ***************步数统计是:%f",totalStep);}];[store executeQuery:query];}
- (void)updateDistance{NSCalendar *calendar = [NSCalendar currentCalendar];NSDate *now = [NSDate date];NSDateComponents *components = [calendar components:NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay fromDate:now];NSDate *startDate = [calendar dateFromComponents:components];NSDate *endDate = [calendar dateByAddingUnit:NSCalendarUnitDay value:1 toDate:startDate options:0];HKQuantityType *sampleType = [HKQuantityType quantityTypeForIdentifier:HKQuantityTypeIdentifierDistanceWalkingRunning];NSPredicate *predicate = [HKQuery predicateForSamplesWithStartDate:startDate endDate:endDate options:HKQueryOptionStrictStartDate];HKStatisticsQuery *query = [[HKStatisticsQuery alloc] initWithQuantityType:sampleType quantitySamplePredicate:predicate options:HKStatisticsOptionCumulativeSum completionHandler:^(HKStatisticsQuery *query, HKStatistics *result, NSError *error) {// if (!result) {// if (completionHandler) {// completionHandler(0.0f, error);// }// return;// }double totalStep = [result.sumQuantity doubleValueForUnit:[HKUnit meterUnit]];NSLog(@" -------------距离统计是:%f",totalStep);}];[store executeQuery:query];
}
- (void)updateEnergy{NSCalendar *calendar = [NSCalendar currentCalendar];NSDate *now = [NSDate date];NSDateComponents *components = [calendar components:NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay fromDate:now];NSDate *startDate = [calendar dateFromComponents:components];NSDate *endDate = [calendar dateByAddingUnit:NSCalendarUnitDay value:1 toDate:startDate options:0];HKQuantityType *sampleType = [HKQuantityType quantityTypeForIdentifier:HKQuantityTypeIdentifierDietaryEnergyConsumed];NSPredicate *predicate = [HKQuery predicateForSamplesWithStartDate:startDate endDate:endDate options:HKQueryOptionStrictStartDate];HKStatisticsQuery *query = [[HKStatisticsQuery alloc] initWithQuantityType:sampleType quantitySamplePredicate:predicate options:HKStatisticsOptionCumulativeSum completionHandler:^(HKStatisticsQuery *query, HKStatistics *result, NSError *error) {// if (!result) {// if (completionHandler) {// completionHandler(0.0f, error);// }// return;// }double totalStep = [result.sumQuantity doubleValueForUnit:[HKUnit calorieUnit]];NSLog(@" -------------卡路里统计是:%f",totalStep);}];[store executeQuery:query];
}
获取步数代码
- (void)getHealthStepData{HKHealthStore *healthStore = [[HKHealthStore alloc]init];NSCalendar *calendar = [NSCalendar currentCalendar];// 设置时间支持单位NSDateComponents *anchorComponents =[calendar components:NSCalendarUnitDay | NSCalendarUnitMonth |NSCalendarUnitYear | NSCalendarUnitWeekday fromDate:[NSDate date]];NSDate *anchorDate = [calendar dateFromComponents:anchorComponents];// 获取数据的截止时间 今天NSDate *endDate = [NSDate date];// 获取数据的起始时间 此处取从今日往前推100天的数据NSDate *startDate = [NSDate dateWithTimeIntervalSinceNow:-100*24*60*60];// 数据类型HKQuantityType *type = [HKObjectType quantityTypeForIdentifier:HKQuantityTypeIdentifierStepCount];// Your interval: sum by hourNSDateComponents *intervalComponents = [[NSDateComponents alloc] init];intervalComponents.day = 1;// Example predicate 用于获取设置时间段内的数据NSPredicate *predicate = [HKQuery predicateForSamplesWithStartDate:startDate endDate:endDate options:HKQueryOptionStrictStartDate];HKStatisticsCollectionQuery *query = [[HKStatisticsCollectionQuery alloc] initWithQuantityType:type quantitySamplePredicate:predicate options:HKStatisticsOptionCumulativeSum anchorDate:anchorDate intervalComponents:intervalComponents];query.initialResultsHandler = ^(HKStatisticsCollectionQuery *query, HKStatisticsCollection *result, NSError *error) {for (HKStatistics *sample in [result statistics]) {// NSLog(@"--------------%@ 至 %@ : %@", sample.startDate, sample.endDate, sample.sumQuantity);NSDate *date = sample.endDate;NSDateFormatter *formatter = [[NSDateFormatter alloc] init];[formatter setDateFormat:@"yyyy-MM-dd"];NSString *dateTime = [formatter stringFromDate:date];double totalStep = [sample.sumQuantity doubleValueForUnit:[HKUnit countUnit]];NSString *appleHealth = @"com.apple.Health";double editStep = 0.0;for (HKSource *source in sample.sources) {if ([source.bundleIdentifier isEqualToString:appleHealth]) {// 获取用户自己添加的数据 并减去,防止用户手动刷数据HKSource *healthSource = source;editStep = [[sample sumQuantityForSource:healthSource] doubleValueForUnit:[HKUnit countUnit]];}}NSInteger step = (NSInteger)totalStep - (NSInteger)editStep;NSString *value = [NSString stringWithFormat:@"%ld",step];NSDictionary *dic = [NSDictionary dictionaryWithObjectsAndKeys:dateTime,@"dateTime",value,@"value",nil];[self.healthSteps addObject:dic];// NSLog(@"gaizaoDateStyle:%@ Dic = %@",self.healthSteps,dic);}self.healthCalories = self.healthSteps;NSDictionary *healthSteps = [NSDictionary dictionaryWithObjectsAndKeys:self.healthSteps,@"healthSteps",self.healthCalories,@"healthCalories",nil];NSLog(@"改造数据格式:%@",healthSteps);};[healthStore executeQuery:query];
}
获取距离代码
- (void)getHealthDistanceData{HKHealthStore *healthStore = [[HKHealthStore alloc]init];NSCalendar *calendar = [NSCalendar currentCalendar];NSDateComponents *anchorComponents =[calendar components:NSCalendarUnitDay | NSCalendarUnitMonth |NSCalendarUnitYear | NSCalendarUnitWeekday fromDate:[NSDate date]];NSDate *anchorDate = [calendar dateFromComponents:anchorComponents];NSDate *endDate = [NSDate date];NSDate *startDate = [NSDate dateWithTimeIntervalSinceNow:-100*24*60*60];HKQuantityType *type = [HKObjectType quantityTypeForIdentifier:HKQuantityTypeIdentifierDistanceWalkingRunning];// Your interval: sum by hourNSDateComponents *intervalComponents = [[NSDateComponents alloc] init];intervalComponents.day = 1;// Example predicateNSPredicate *predicate = [HKQuery predicateForSamplesWithStartDate:startDate endDate:endDate options:HKQueryOptionStrictStartDate];HKStatisticsCollectionQuery *query = [[HKStatisticsCollectionQuery alloc] initWithQuantityType:type quantitySamplePredicate:predicate options:HKStatisticsOptionCumulativeSum anchorDate:anchorDate intervalComponents:intervalComponents];query.initialResultsHandler = ^(HKStatisticsCollectionQuery *query, HKStatisticsCollection *result, NSError *error) {for (HKStatistics *sample in [result statistics]) {// NSLog(@"+++++++++++++++%@ 至 %@ : %@", sample.startDate, sample.endDate, sample.sumQuantity);NSDate *date = sample.endDate;NSDateFormatter *formatter = [[NSDateFormatter alloc] init];[formatter setDateFormat:@"yyyy-MM-dd"];NSString *dateTime = [formatter stringFromDate:date];double totalDistance = [sample.sumQuantity doubleValueForUnit:[HKUnit meterUnit]];NSString *appleHealth = @"com.apple.Health";// double floor = [sample.sumQuantity doubleValueForUnit:[HKUnit yardUnit]];double editDistance = 0.0;for (HKSource *source in sample.sources) {if ([source.bundleIdentifier isEqualToString:appleHealth]) {// 获取用户自己添加的数据 并减去,防止用户手动刷数据HKSource *healthSource = source;editDistance = [[sample sumQuantityForSource:healthSource] doubleValueForUnit:[HKUnit meterUnit]];}}double distance = totalDistance/1000 - editDistance/1000;NSString *value = [NSString stringWithFormat:@"%f",distance];NSDictionary *dic = [NSDictionary dictionaryWithObjectsAndKeys:dateTime,@"dateTime",value,@"value",nil];[self.healthDistances addObject:dic];}NSLog(@"改造距离格式:%@",self.healthDistances);};[healthStore executeQuery:query];
}
iOS 获取步数等健康信息相关推荐
- iOS获取设备常用健康数据
自己封装的工具类,用来获取设备健康数据 内附demo,注意项目需要配置info.plist iOS获取设备常用健康数据:https://github.com/CocoaMiAo/EMHealthyKi ...
- iOS获取设备UDID/IMEI信息
标题iOS获取设备UDID/IMEI信息 通过Safari与mobileconfig获取iOS设备UDID UDID (Unique Device Identifier),唯一标示符,是iOS设备的一 ...
- IOS获取系统通讯录联系人信息
2019独角兽企业重金招聘Python工程师标准>>> IOS获取系统通讯录联系人信息 一.权限注册 随着apple对用户隐私的越来越重视,IOS系统的权限设置也更加严格,在获取系统 ...
- ElasticSearch5.3插件开发(二)获取集群健康信息
前面一篇,简单讲过插件开发,打印信息,今天我们开发一个有实际意义的插件,获得集群健康信息. 先看代码 MyFirstPlugin.java package es.plugins; import org ...
- IOS -- 获取用户的健康数据的运动步数
最近在做和微信运动差不多的一个功能 就是从用户手机的健康里面获取用户的运动数据... 先在开发者中心 选择healthKit 重新生成证书 然后在xcode里面选择 然后就是配置健康数据的权限 到这环 ...
- iOS获取iPhone系统等信息和服务器返回空的异常处理
前言: 在项目中经常会遇到需要获取系统的信息来处理一些特殊的需求和服务端返回为空的处理,写在这里只是笔记一下. 获取设备的信息 NSLog(@"globallyUniqueString=%@ ...
- IOS获取当前App的信息
NSDictionary *dicInfo = [[NSBundle mainBundle] infoDictionary]; NSLog(@"App Info: %@", [di ...
- iOS 获取手机所有app信息
详情可以参考 https://github.com/danielamitay/iHasApp 下载完app 后调用 https://ihasapp.herokuapp.com/api/schemeAp ...
- iOS利用HealthKit框架从健康app中获取步数信息
微信和QQ的每日步数最近十分火爆,我就想为自己写的项目中添加一个显示每日步数的功能,上网一搜好像并有相关的详细资料,自己动手丰衣足食. 统计步数信息并不需要我们自己去实现,iOS自带的健康app已经为 ...
最新文章
- ksql中定义的本体在dataModel中不存在
- 精品思维导图,流程图模板分享
- caffe学习(三):caffe开发环境安装(Ubuntu)
- Java窗口(JFrame)从零开始(8)——文本框+文本域+密码框
- 显卡天梯图:2014最新显卡性能天梯图
- python安装界面翻译_Python新手教程:40行python代码写一个桌面翻译器
- python兔子和獾_少儿编程分享:手把手教你用PYTHON编写兔獾大作战(三)
- Linux shell 脚本实例
- 2016可信云大会进入倒计时 顶级“参会攻略”强势来袭
- python循环语句笔记
- Qt 官方例子 Callout Example
- 精仿交易猫手游1:1源码可运营 支持二维码收款
- NLP面试题目汇总11-15
- C语言-文件操作-文件打开方式
- 磁盘及文件系统管理详解
- 2-STM32+ESP8266连接onenet并上传数据(HTTP)
- 网络布线还可以这样,学习一下
- weblogic t3 协议利用与防御
- Nginx下codeigniter的rewrite规则配置
- 基于springboot的办公用品管理系统