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月前
|
BI 索引 Python
利用Numpy读取iris数据集并进行排序、去重、求统计量等操作实战(附源码)
利用Numpy读取iris数据集并进行排序、去重、求统计量等操作实战(附源码)
395 0
|
3月前
用二维码收集信息时,在后台可以查看、统计哪些数据?
如果是用草料二维码平台搭建的二维码,前往后台,在表单列表中找到对应的表单,就能查看数据了,包括通过该表单收集到的所有明细数据、基于关联二维码的统计数据、填写该表单的填表人统计数据、基于表单组件的字段统计数据。
用二维码收集信息时,在后台可以查看、统计哪些数据?
|
7月前
|
数据采集 前端开发 数据挖掘
Fizzler库+C#:从微博抓取热点的最简单方法
本文介绍如何使用Fizzler库和C#构建微博热点信息爬虫。通过Fizzler的CSS选择器定位关键信息,提取热点标题和排名,实现微博内容的智能挖掘。示例代码展示单线程和多线程采集方法,并涉及代理IP使用。
Fizzler库+C#:从微博抓取热点的最简单方法
|
7月前
|
自然语言处理 数据挖掘
2020微博热点数据简析,附完整数据文件下载!
2020微博热点数据简析,附完整数据文件下载!
|
数据采集 SQL 消息中间件
爬虫识别-关键页面数据读取|学习笔记
快速学习爬虫识别-关键页面数据读取
爬虫识别-关键页面数据读取|学习笔记
|
小程序 API 数据库
小程序中读取腾讯文档的表格数据
小程序中读取腾讯文档的表格数据
小程序中读取腾讯文档的表格数据
|
运维 小程序 前端开发
基于小程序云开开发(统计学生信息并导出excel)1.0版本
基于小程序云开开发(统计学生信息并导出excel)1.0版本
124 0
基于小程序云开开发(统计学生信息并导出excel)1.0版本
|
JSON 数据挖掘 数据库
6000字 “保姆级” 教程 | 讲述Pandas库的数据读取、数据获取、数据拼接、数据写出!(一)
6000字 “保姆级” 教程 | 讲述Pandas库的数据读取、数据获取、数据拼接、数据写出!(一)
6000字 “保姆级” 教程 | 讲述Pandas库的数据读取、数据获取、数据拼接、数据写出!(一)
|
数据格式 索引 Python
6000字 “保姆级” 教程 | 讲述Pandas库的数据读取、数据获取、数据拼接、数据写出!(二)
6000字 “保姆级” 教程 | 讲述Pandas库的数据读取、数据获取、数据拼接、数据写出!(二)
6000字 “保姆级” 教程 | 讲述Pandas库的数据读取、数据获取、数据拼接、数据写出!(二)
|
JSON 前端开发 JavaScript
开源网站流量统计系统Piwik源码分析——参数统计(一)
 Piwik现已改名为Matomo,这是一套国外著名的开源网站统计系统,类似于百度统计、Google Analytics等系统。最大的区别就是可以看到其中的源码,这正合我意。因为我一直对统计的系统很好奇,很想知道里面的运行原理是怎么样的,碰巧了解到有这么一个系统,因此马上尝试了一下。国内关于该系统的相关资料比较匮乏,大多是分享怎么安装的,并没有找到有关源码分析的文章。下面先对其做个初步的分析,后面会越来越详细,本人目前的职位是前端,因此会先分析脚本代码,而后再分析后台代码。
开源网站流量统计系统Piwik源码分析——参数统计(一)

热门文章

最新文章