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];

}


目录
相关文章
|
7月前
|
关系型数据库 MySQL
Mysql基础第九天,过滤数据
Mysql基础第九天,过滤数据
52 0
Mysql基础第九天,过滤数据
|
7月前
基于若依的ruoyi-nbcio流程管理系统增加读取节点扩展属性的方法
基于若依的ruoyi-nbcio流程管理系统增加读取节点扩展属性的方法
67 0
|
SQL Java 关系型数据库
从系统报表页面导出20w条数据到本地只用了4秒,我是如何做到的
最近有个学弟找到我,跟我描述了以下场景: 他们公司内部管理系统上有很多报表,报表数据都有分页显示,浏览的时候速度还可以。但是每个报表在导出时间窗口稍微大一点的数据时,就异常缓慢,有时候多人一起导出时还会出现堆溢出。 他知道是因为数据全部加载到jvm内存导致的堆溢出。所以只能对时间窗口做了限制。以避免因导出过数据过大而引起的堆溢出。最终拍脑袋定下个限制为:导出的数据时间窗口不能超过1个月。
|
数据挖掘
白话Elasticsearch35-深入聚合数据分析之案例实战更多metrics用法:统计每种颜色电视最大最小价格
白话Elasticsearch35-深入聚合数据分析之案例实战更多metrics用法:统计每种颜色电视最大最小价格
98 0
|
小程序 API 数据库
小程序中读取腾讯文档的表格数据
小程序中读取腾讯文档的表格数据
小程序中读取腾讯文档的表格数据
|
SQL 存储 关系型数据库
|
Oracle 关系型数据库 Shell
[自制工具]批量后台更新统计信息
Oracle数据库有时需要批量收集数据库的统计信息,如在大量数据迁移或大量数据更新以后,但是收集的时间可能会较长,为了避免网络中断等意外情况可能引起的麻烦,今天调试了这个小脚本,可以分用户批量执行,同时记录执行时间等日志信息,比较实用。
223 0
|
Shell Perl
《懒人Shell脚本》之四——日志条数动态实时统计
1、需求点 1)输入:日志实时更新:当前日志表以秒级更新日志,每秒有多条日志更新。格式如下:
178 0
|
Shell 程序员
懒人Shell脚本》之四——日志条数动态实时统计
本文是《懒人Shell脚本》之四——日志条数动态实时统计详解
1032 0