HealthKit之实战统计读取

简介:

- (void)queryStepCount

{

    if (![HKHealthStore isHealthDataAvailable])

    {

        NSLog(@"设备不支持healthKit"); return;

    }

    _healthStore = [[HKHealthStore alloc] init];

    HKObjectType *type1 = [HKObjectType quantityTypeForIdentifier:HKQuantityTypeIdentifierStepCount]; // 步数

    NSSet *set = [NSSet setWithObjects:type1, nil]; // 读集合

    

    __weak typeof (&*self) weakSelf = self;

    [_healthStore requestAuthorizationToShareTypes:nil readTypes:set completion:^(BOOL success, NSError * _Nullable error) {

        if (success)

        {

            [weakSelf readStepCount];

        } else

        {

            NSLog(@"healthkit不允许读写");

        }

    }];

}


//查询数据

- (void)readStepCount

{    

    // 统计分析

    sampleType = [HKQuantityType quantityTypeForIdentifier:HKQuantityTypeIdentifierStepCount];


    NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];

    NSDateComponents *dateCom = [calendar components:NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit fromDate:[NSDate date]];

    

    NSDate *startDate, *endDate;

    endDate = [calendar dateFromComponents:dateCom];

    

    [dateCom setHour:0];

    [dateCom setMinute:0];

    [dateCom setSecond:0];

    

    startDate = [calendar dateFromComponents:dateCom];

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

    NSUInteger op = HKStatisticsOptionCumulativeSum;

    HKStatisticsQuery *q1 = [[HKStatisticsQuery alloc] initWithQuantityType:sampleType quantitySamplePredicate:predicate options:op completionHandler:^(HKStatisticsQuery * _Nonnull query, HKStatistics * _Nullable result, NSError * _Nullable error) {

        NSLog(@"\n\n");

        if (error)

        {

            NSLog(@"统计出错 %@", error);

            return;

        }

        double sum1 = [result.averageQuantity doubleValueForUnit:[HKUnit countUnit]];

        double sum2 = [result.minimumQuantity doubleValueForUnit:[HKUnit countUnit]];

        double sum3 = [result.maximumQuantity doubleValueForUnit:[HKUnit countUnit]];

        double sum4 = [result.sumQuantity doubleValueForUnit:[HKUnit countUnit]];

        NSLog(@"统计平均步数=%@", @(sum1));

        NSLog(@"统计最小步数=%@", @(sum2));

        NSLog(@"统计最大步数=%@", @(sum3));

        NSLog(@"统计步数=%@", @(sum4));

        NSLog(@"\n\n");

    }];


    

    // 间隔一小时统计一次

    NSDateComponents *hComponents = [calendar components:NSCalendarUnitHour fromDate:[NSDate date]];

    [hComponents setHour:1];

    HKStatisticsCollectionQuery *q2  =[[HKStatisticsCollectionQuery alloc] initWithQuantityType:sampleType quantitySamplePredicate:predicate options:op anchorDate:startDate intervalComponents:hComponents];

    q2.initialResultsHandler = ^(HKStatisticsCollectionQuery *query, HKStatisticsCollection * __nullable result, NSError * __nullable error) {

        if (error)

        {

            NSLog(@"统计init出错 %@", error);

            return;

        }

        for (HKStatistics *s in result.statistics)

        {

            double sum1 = [s.averageQuantity doubleValueForUnit:[HKUnit countUnit]];

            double sum2 = [s.minimumQuantity doubleValueForUnit:[HKUnit countUnit]];

            double sum3 = [s.maximumQuantity doubleValueForUnit:[HKUnit countUnit]];

            double sum4 = [s.sumQuantity doubleValueForUnit:[HKUnit countUnit]];

            NSLog(@"init统计平均步数=%@", @(sum1));

            NSLog(@"init统计最小步数=%@", @(sum2));

            NSLog(@"init统计最大步数=%@", @(sum3));

            NSLog(@"init统计步数=%@", @(sum4));

        }

    };

    q2.statisticsUpdateHandler = ^(HKStatisticsCollectionQuery *query, HKStatistics * __nullable statistics, HKStatisticsCollection * __nullable collection, NSError * __nullable error) {

        if (error)

        {

            NSLog(@"统计update出错 %@", error);

            return;

        }

        for (HKStatistics *result in collection.statistics)

        {

            double sum1 = [result.averageQuantity doubleValueForUnit:[HKUnit countUnit]];

            double sum2 = [result.minimumQuantity doubleValueForUnit:[HKUnit countUnit]];

            double sum3 = [result.maximumQuantity doubleValueForUnit:[HKUnit countUnit]];

            double sum4 = [result.sumQuantity doubleValueForUnit:[HKUnit countUnit]];

            NSLog(@"update统计平均步数=%@", @(sum1));

            NSLog(@"update统计最小步数=%@", @(sum2));

            NSLog(@"update统计最大步数=%@", @(sum3));

            NSLog(@"update统计步数=%@", @(sum4));

        }

    };

    

    //执行查询

    [_healthStore executeQuery:q1];

    [_healthStore executeQuery:q2];

}


目录
相关文章
|
存储 文件存储 Windows
简单好用的免费数据恢复软件EasyRecovery
EasyRecovery是Ontrack公司出品的一个硬盘数据恢复软件,能够帮你恢复丢失的数据以及重建文件系统。它提供了完善的数据恢复解决方案,比如删除文件恢复、格式化恢复、分区丢失恢复。在EasyRecovery 14专业版本中,还可以创建恢复盘和克隆盘,实现整盘的数据恢复及系统迁移。
1092 0
|
域名解析 网络协议 视频直播
视频直播推流拉流慢、卡顿解决方案
视频直播类App当前已经普遍采用CDN来实现访问加速,但还是经常遇到推拉流慢、卡顿的问题。这类问题一般是由于调度不精准、域名劫持、终端手机接入网络动态切换等因素导致,结合使用CDN和HTTPDNS可以比较完美解决此类问题。
2434 0
视频直播推流拉流慢、卡顿解决方案
|
监控 jenkins Java
Jenkins部署及使用(安装maven配置阿里云镜像、git工具)
Jenkins部署及使用(安装maven配置阿里云镜像、git工具)
Jenkins部署及使用(安装maven配置阿里云镜像、git工具)
|
11月前
|
监控 负载均衡 算法
slb持续监控与调优
slb持续监控与调优
199 8
|
小程序 JavaScript 安全
【微信小程序-原生开发】转发给好友/群,分享到朋友圈(含单页模式访问云开发数据库的方法)
【微信小程序-原生开发】转发给好友/群,分享到朋友圈(含单页模式访问云开发数据库的方法)
582 0
|
存储 算法 NoSQL
细说雪花算法
细说雪花算法
383 0
|
关系型数据库 MySQL 数据库管理
|
存储 数据挖掘 数据库
data的含义与作用及使用方法
data的含义与作用及使用方法
7954 0
33-Vue之ECharts高级-设置主题
33-Vue之ECharts高级-设置主题
|
Linux
Linux命令篇:chmod 777 与 chmod +x
man chmod 可以查看linux命令解释
1146 0