HealthKit之实战读取本人消息

简介:

- (void)requestHealthAuthorization

{

    if (![HKHealthStore isHealthDataAvailable])

    {

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

    }

    _healthStore = [[HKHealthStore alloc] init];

    HKObjectType *type1 = [HKObjectType characteristicTypeForIdentifier:HKCharacteristicTypeIdentifierBiologicalSex]; // 性别

    HKObjectType *type2 = [HKObjectType characteristicTypeForIdentifier:HKCharacteristicTypeIdentifierBloodType];//血型

    HKObjectType *type3 = [HKObjectType characteristicTypeForIdentifier:HKCharacteristicTypeIdentifierDateOfBirth];//出生日期

    HKObjectType *type4 = [HKObjectType characteristicTypeForIdentifier:HKCharacteristicTypeIdentifierFitzpatrickSkinType];//日光反应型皮肤类型

    

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

   

    __weak typeof (&*self) weakSelf = self;

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

        if (success)

        {

            [weakSelf readHealthPersonInfo];

        } else

        {

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

        }

    }];

}


//查询数据

- (void)readHealthPersonInfo

{

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

    {

        NSLog(@"\n\n");

        NSLog(@"数据从这天%@才能读到, [_healthStore earliestPermittedSampleDate]);

    }

    NSError *error = nil;

    NSDate *b = [_healthStore dateOfBirthWithError:&error];

    if (!error) NSLog(@"出生日期=%@", b);

    else NSLog(@"出生日期error=%@", error);

    

    error = nil;

    HKBiologicalSexObject *s = [_healthStore biologicalSexWithError:&error];

    if (!error) {

        NSLog(@"性别=%@", @(s.biologicalSex));

    } else {

        NSLog(@"性别error=%@",error);

    }

    

    error = nil;

    HKBloodTypeObject *blood = [_healthStore bloodTypeWithError:&error];

    if (!error) {

        NSLog(@"血型=%@", @(blood.bloodType));

    } else {

        NSLog(@"血型error=%@",error);

    }

    

    error = nil;

    HKFitzpatrickSkinTypeObject *fitz = [_healthStore fitzpatrickSkinTypeWithError:&error];

    if (!error) {

        NSLog(@"日光反应型皮肤类型=%@", @(fitz.skinType));

    } else {

        NSLog(@"日光反应型皮肤类型error=%@",error);

    }

}


目录
相关文章
|
存储 编解码 安全
现代IM系统中聊天消息的同步和存储方案探讨
本文原作者:木洛,阿里云高级技术专家,内容有删减和修订,感谢原作者。 1、前言 IM全称是『Instant Messaging』,中文名是即时通讯。在这个高度信息化的移动互联网时代,生活中IM类产品已经成为必备品,比较有名的如钉钉、微信、QQ等以IM为核心功能的产品。
5111 0
|
2月前
|
程序员 数据库 UED
微信也在用的消息时序性技术,你知道多少?
本文由程序员小米撰写,探讨了在个人项目中如何保证消息的时序性。文章详细介绍了消息时序性的概念及其重要性,并提出了三种方案:ID设计(借鉴微信号段与跳跃式生成)、单聊场景下的单点序列化同步,以及群聊场景中的单点序列化处理。此外,还提供了多种优化方法,如消息时序对齐、本地时序记录等,帮助读者更好地解决消息乱序问题。适合所有关心即时通讯和社交应用技术细节的开发者阅读。
45 4
|
3月前
|
消息中间件 运维 Java
【揭秘RabbitMQ背后的秘密!】如何确保消息正确发送及消费?深入剖析与实战指南!
【8月更文挑战第24天】本文通过一个电商平台订单确认消息的案例,深入探讨了如何确保消息准确无误地发送到 RabbitMQ 以及如何保证消息被正确处理。为确保消息成功发送,文中介绍了使用发布确认、设置重试机制及事务处理等策略;并通过 Java 代码示例展示了如何实施这些策略。此外,还讨论了确保消息正确消费的方法,包括使用确认机制、设置超时及异常处理等,并提供了相应的 Java 示例代码。这些技术和策略有助于提升系统的稳定性和可靠性,对日常运维和性能优化具有重要意义。
58 1
|
消息中间件 存储 RocketMQ
实时更新消息消费队列与索引文件流程说明|学习笔记
快速学习实时更新消息消费队列与索引文件流程说明
实时更新消息消费队列与索引文件流程说明|学习笔记
|
消息中间件 存储 RocketMQ
消息达到后实时推送机制|学习笔记
快速学习消息达到后实时推送机制
消息达到后实时推送机制|学习笔记
|
NoSQL Redis 开发者
数据类型-案例:微信接收消息顺序控制| 学习笔记
快速学习数据类型-案例:微信接收消息顺序控制
数据类型-案例:微信接收消息顺序控制| 学习笔记
|
JSON 网络协议 测试技术
海量用户通讯系统-服务器接收消息2|学习笔记
快速学习海量用户通讯系统-服务器接收消息2
海量用户通讯系统-服务器接收消息2|学习笔记
|
消息中间件 存储 数据采集
CreateDirectStream 消费数据补充|学习笔记
快速学习 CreateDirectStream 消费数据补充
Ele
|
消息中间件 存储 架构师
消息丢失案例分析
关于MQ的消息丢失数据,分析
Ele
320 0
一对一聊天平台源码,不同数据缺失处理方法的比较
一对一聊天平台源码,不同数据缺失处理方法的比较