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

{    

    //查询采样信息

    HKQuantityType *sampleType = [HKQuantityType quantityTypeForIdentifier:HKQuantityTypeIdentifierStepCount];

    

    //NSSortDescriptors用来告诉healthStore怎么样将结果排序。

    NSSortDescriptor *start = [NSSortDescriptor sortDescriptorWithKey:HKSampleSortIdentifierStartDate ascending:NO];

    NSSortDescriptor *end   = [NSSortDescriptor sortDescriptorWithKey:HKSampleSortIdentifierEndDate ascending:NO];

    

    /*查询的基类是HKQuery,这是一个抽象类,能够实现每一种查询目标,这里我们需要查询的步数是一个

     HKSample类所以对应的查询类就是HKSampleQuery

     下面的limit参数传1表示查询最近一条数据,查询多条数据只要设置limit的参数值就可以了

     */

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

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

    

     // 从锚点为0处开始查询符合条件的所有记录

    HKAnchoredObjectQuery *q1 = [[HKAnchoredObjectQuery alloc] initWithType:sampleType predicate:predicate anchor:HKAnchoredObjectQueryNoAnchor limit:HKObjectQueryNoLimit completionHandler:^(HKAnchoredObjectQuery * _Nonnull query, NSArray<__kindof HKSample *> * _Nullable results, NSUInteger newAnchor, NSError * _Nullable error) {

        double sum = 0;

//        NSLog(@"results==%@", results);

        for (HKQuantitySample *res in results)

        {

            sum += [res.quantity doubleValueForUnit:[HKUnit countUnit]];

        }

        NSLog(@"Anchor%@查询步数=%@", @(newAnchor), @(sum));

    }];

    // 从锚点为0处开始查询符合条件的一条记录,查询结果得到的锚点是12160

    HKAnchoredObjectQuery *q2 = [[HKAnchoredObjectQuery alloc] initWithType:sampleType predicate:predicate anchor:HKAnchoredObjectQueryNoAnchor limit:1 completionHandler:^(HKAnchoredObjectQuery * _Nonnull query, NSArray<__kindof HKSample *> * _Nullable results, NSUInteger newAnchor, NSError * _Nullable error) {

        double sum = 0;

//        NSLog(@"results==%@", results);

        for (HKQuantitySample *res in results)

        {

            sum += [res.quantity doubleValueForUnit:[HKUnit countUnit]];

        }

        NSLog(@"Anchor%@查询步数=%@", @(newAnchor), @(sum));

    }];

    // 从锚点12160处开始查询符合条件的一条记录,锚点起到分页查询的作用

    HKAnchoredObjectQuery *q3 = [[HKAnchoredObjectQuery alloc] initWithType:sampleType predicate:predicate anchor:12160 limit:1 completionHandler:^(HKAnchoredObjectQuery * _Nonnull query, NSArray<__kindof HKSample *> * _Nullable results, NSUInteger newAnchor, NSError * _Nullable error) {

        double sum = 0;

//        NSLog(@"results==%@", results);

        for (HKQuantitySample *res in results)

        {

            sum += [res.quantity doubleValueForUnit:[HKUnit countUnit]];

            NSLog(@"device name:%@", res.device.name);

            NSLog(@"device manufacturer:%@", res.device.manufacturer);

            NSLog(@"device hardwareVersion:%@", res.device.hardwareVersion);

            NSLog(@"device firmwareVersion:%@", res.device.firmwareVersion);

            NSLog(@"device softwareVersion:%@", res.device.softwareVersion);

            NSLog(@"device localIdentifier:%@", res.device.localIdentifier);

            NSLog(@"device UDIDeviceIdentifier:%@", res.device.UDIDeviceIdentifier);

            

            NSLog(@"uuid:%@", res.UUID);

            

            HKSource *source = nil;

            if ([UIDevice currentDevice].systemVersion.floatValue >= 8)

            {

                source = res.sourceRevision.source;

                NSLog(@"source version:%@", res.sourceRevision.version);

            } else

            {

                source = res.source;

            }

            

            NSLog(@"source:%@", source.name);

            NSLog(@"source:%@", source.bundleIdentifier);

            

            NSLog(@"metadata:%@", res.metadata);

        }

        NSLog(@"Anchor%@查询步数=%@", @(newAnchor), @(sum));

    }];

        

    //执行查询

    [_healthStore executeQuery:q1];

    [_healthStore executeQuery:q2];

    [_healthStore executeQuery:q3];

}


目录
相关文章
|
SQL 算法 大数据
为什么大数据平台会回归SQL
在大数据领域,尽管非结构化数据占据了大数据平台80%以上的存储空间,结构化数据分析依然是核心任务。SQL因其广泛的应用基础和易于上手的特点成为大数据处理的主要语言,各大厂商纷纷支持SQL以提高市场竞争力。然而,SQL在处理复杂计算时表现出的性能和开发效率低下问题日益凸显,如难以充分利用现代硬件能力、复杂SQL优化困难等。为了解决这些问题,出现了像SPL这样的开源计算引擎,它通过提供更高效的开发体验和计算性能,以及对多种数据源的支持,为大数据处理带来了新的解决方案。
|
11月前
|
人工智能 自然语言处理 算法
魔搭社区每周速递(11.24-11.30)
魔搭ModelScope本期社区进展:1361个模型,29个数据集,44个创新应用,5 篇内容
魔搭社区每周速递(11.24-11.30)
|
JSON 自然语言处理 数据管理
阿里云百炼产品月刊【2024年9月】
阿里云百炼产品月刊【2024年9月】,涵盖本月产品和功能发布、活动,应用实践等内容,帮助您快速了解阿里云百炼产品的最新动态。
1072 0
|
11月前
|
Shell 测试技术 索引
test工具的使用,你知道多少?
本文介绍了shell命令测试工具test的基本使用方法,包括文件存在性、属性检查、文件比较、数值和字符串比较及多条件判定等常见应用场景,并提供了具体示例和参数说明。
345 1
|
11月前
|
安全 搜索推荐 Unix
【C语言】《回调函数》详细解析
回调函数是指一个通过函数指针调用的函数。它允许将一个函数作为参数传递给另一个函数,并在特定事件发生时执行。这种技术使得编程更加灵活,可以动态决定在何时调用哪个函数。
752 1
|
机器学习/深度学习 自然语言处理 算法
大数据与机器学习
大数据与机器学习紧密相关,前者指代海量、多样化且增长迅速的数据集,后者则是使计算机通过数据自动学习并优化的技术。大数据涵盖结构化、半结构化及非结构化的信息,其应用广泛,包括商业智能、金融和医疗保健等领域;而机器学习分为监督学习、无监督学习及强化学习,被应用于图像识别、自然语言处理和推荐系统等方面。二者相结合,能有效提升数据分析的准确性和效率,在智能交通、医疗及金融科技等多个领域创造巨大价值。
566 2
|
机器学习/深度学习 算法 数据挖掘
社交网络分析7:社交网络舆情分析 、 社交网络舆情演化传播建模 、 社交网络舆情用户研究 意见领袖识别 情感分析 、结构洞 、 生命周期 、 舆情分析 知识图谱 主题图谱 、 异质平均场
社交网络分析7:社交网络舆情分析 、 社交网络舆情演化传播建模 、 社交网络舆情用户研究 意见领袖识别 情感分析 、结构洞 、 生命周期 、 舆情分析 知识图谱 主题图谱 、 异质平均场
1694 0
|
数据采集 SQL 监控
一次基于日志服务(SLS)进行前端业务埋点的实现过程
一次基于日志服务(SLS)进行前端业务埋点的实现过程
1614 1
|
安全 定位技术 Android开发
Android Auto汽车下载使用教程(中国版)
Android Auto汽车下载使用教程(中国版)
Android Auto汽车下载使用教程(中国版)