• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ios - 如何将我们在健康应用程序中输入的高度和体重数据读取到我们的自定义应用程序中

[复制链接]
菜鸟教程小白 发表于 2022-12-12 14:55:59 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

如何将我们在健康应用中输入的高度和体重数据值读取到我们的自定义应用中?



Best Answer-推荐答案


1.请求 HealthKit 授权:

- (void)checkHealthStoreAuthorization
{
    if ([HKHealthStore isHealthDataAvailable]) {
        NSSet *readDataTypes = [self dataTypesToRead];

        if (!self.healthStore) {
            self.healthStore = [[HKHealthStore alloc] init];
        }

        static NSInteger i = 0;
        for (HKObjectType * quantityType in readDataTypes) {
            if ([self.healthStore authorizationStatusForType:quantityType] == HKAuthorizationStatusNotDetermined) {
                [self.healthStore requestAuthorizationToShareTypes:nil readTypes:readDataTypes completion:^(BOOL success, NSError *error) {
                    i++;
                    if (!success) {
                        if (error) {
                            NSLog(@"requestAuthorizationToShareTypes error: %@", error);
                        }
                        return;
                    } else {
                        if (i == [readDataTypes count]) {
                            static dispatch_once_t onceToken;
                            dispatch_once(&onceToken, ^{
                                [self getHeight];
                                [self getWeight];
                            });
                        }
                    }
                }];
            } else {
                if ([quantityType isEqual:[HKObjectType quantityTypeForIdentifier:HKQuantityTypeIdentifierHeight]]) {
                    [self getHeight];
                } else if ([quantityType isEqual:[HKObjectType quantityTypeForIdentifier:HKQuantityTypeIdentifierBodyMass]]) {
                    [self getWeight];
                }
            }
        }
    }
}

- (NSSet *)dataTypesToRead
{
    HKQuantityType *height = [HKObjectType quantityTypeForIdentifier:HKQuantityTypeIdentifierHeight];
    HKQuantityType *weight = [HKObjectType quantityTypeForIdentifier:HKQuantityTypeIdentifierBodyMass];
    return [NSSet setWithObjects:height, weight, nil];
}

<强>2。获取高度和体重:

- (void)getHeight
{
    NSDateComponents *interval = [[NSDateComponents alloc] init];
    interval.month = 1;
    HKQuantityType *quantityType = [HKObjectType quantityTypeForIdentifier:HKQuantityTypeIdentifierHeight];

    HKStatisticsCollectionQuery *query =
    [[HKStatisticsCollectionQuery alloc] initWithQuantityType:quantityType
                                      quantitySamplePredicate:nil
                                                      options:HKStatisticsOptionDiscreteAverage
                                                   anchorDate:[NSDate date]
                                           intervalComponents:interval];

    query.initialResultsHandler = ^(HKStatisticsCollectionQuery *query, HKStatisticsCollection *results, NSError *error) {
        if (error) {
            NSLog(@"An error occurred while retrieving body mass: %@", error);
        }

        [results enumerateStatisticsFromDate:[self startDate]
                                      toDate:[NSDate date]
                                   withBlock:^(HKStatistics *result, BOOL *stop) {
                                       HKQuantity *quantity = result.averageQuantity;

                                       const int month = 30 * 24 * 60 * 60;
                                       static BOOL isLastMonthResult;
                                       static double lastHeight;

                                       if ([[NSDate date] timeIntervalSinceDate:result.startDate] < month) {
                                           isLastMonthResult = YES;
                                           if (!quantity && lastHeight > 0.0) {
                                               NSLog(@"Height: %lf", lastHeight);
                                           }
                                       }

                                       if (quantity) {
                                           lastHeight = [quantity doubleValueForUnit:[HKUnit meterUnit]] * 100;
                                           if (isLastMonthResult) {
                                               NSLog(@"Height: %lf", lastHeight);
                                           }
                                       }
                                   }];
    };

    [self.healthStore executeQuery:query];
}

- (void)getWeight
{
    NSDateComponents *interval = [[NSDateComponents alloc] init];
    interval.month = 1;
    HKQuantityType *quantityType = [HKObjectType quantityTypeForIdentifier:HKQuantityTypeIdentifierBodyMass];

    HKStatisticsCollectionQuery *query =
    [[HKStatisticsCollectionQuery alloc] initWithQuantityType:quantityType
                                      quantitySamplePredicate:nil
                                                      options:HKStatisticsOptionDiscreteAverage
                                                   anchorDate:[NSDate date]
                                           intervalComponents:interval];

    query.initialResultsHandler = ^(HKStatisticsCollectionQuery *query, HKStatisticsCollection *results, NSError *error) {
        if (error) {
            NSLog(@"An error occurred while retrieving body mass: %@", error);
        }

        [results enumerateStatisticsFromDate:[self startDate]
                                      toDate:[NSDate date]
                                   withBlock:^(HKStatistics *result, BOOL *stop) {
                                       HKQuantity *quantity = result.averageQuantity;

                                       const int month = 30 * 24 * 60 * 60;
                                       static BOOL isLastMonthResult;
                                       static double lastWeight;

                                       if ([[NSDate date] timeIntervalSinceDate:result.startDate] < month) {
                                           isLastMonthResult = YES;
                                           if (!quantity && lastWeight > 0.0) {
                                               NSLog(@"Weight: %lf", lastWeight);
                                           }
                                       }

                                       if (quantity) {
                                           lastWeight = [quantity doubleValueForUnit:[HKUnit gramUnit]] / 1000;
                                           if (isLastMonthResult) {
                                               NSLog(@"Weight: %lf", lastWeight);
                                           }
                                       }
                                   }];
    };

    [self.healthStore executeQuery:query];
}

- (NSDate *)startDate
{
    NSCalendar *calendar = [NSCalendar currentCalendar];
    NSDateComponents *components = [calendar components:NSCalendarUnitDay | NSCalendarUnitMonth | NSCalendarUnitYear fromDate:[NSDate date]];
    components.hour = 0;
    components.year -= 1;
    NSDate *startDate = [calendar dateFromComponents:components];
    return startDate;
}

关于ios - 如何将我们在健康应用程序中输入的高度和体重数据读取到我们的自定义应用程序中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29389540/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap