iOS 获取步数等健康信息
来源:互联网 发布:iphone4s蜂窝数据设置 编辑:程序博客网 时间:2024/05/17 21:44
导入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;//距离
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 hour NSDateComponents *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 hour NSDateComponents *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 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];}
阅读全文
0 0
- iOS 获取步数等健康信息
- iOS 获取健康里的信息(步数和公里数)
- iOS利用HealthKit框架从健康app中获取步数信息
- iOS利用HealthKit框架从健康app中获取步数信息
- iOS利用HealthKit框架从健康app中获取步数信息
- HealthKit 从健康app中获取步数信息
- iOS获取健康步数从加速计到healthkit
- iOS获取健康步数从加速计到healthkit
- iOS 健康 获取运动步数 距离 时间
- IOS -- 获取用户的健康数据的运动步数
- iOS-获取手机健康步数,去除人为添加的数据
- iOS-获取手机健康步数,去除人为添加的数据
- iOS利用HealthKit获取健康里的步数和睡眠时间
- iOS-获取手机健康步数,去除人为添加的数据
- ios-步数的获取
- HealthKit 获取健康步数,去除人为添加的数据
- CMPedometer(计步器)使用,获取用户行走步数、距离等信息
- iOS使用HHealthKit读取修改健康步数
- python+ubuntu+flask入门第一课
- 【java多线程 锁】死锁
- jsoup分页
- 详解spl_autoload_register()函数
- 关于hibenate 中的session is closed问题
- iOS 获取步数等健康信息
- 开始写点什么——记录工作生活中的感悟
- JavaScript学习总结(二十一)——使用JavaScript的数组实现数据结构中的队列与堆栈
- sublime Text3 注册码
- 总结
- buildroot使用详解
- ROS导航功能包
- C#中接口的作用
- 数据类型的学习(1)