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

    }

}


目录
相关文章
|
1天前
|
程序员 数据库 UED
微信也在用的消息时序性技术,你知道多少?
本文由程序员小米撰写,探讨了在个人项目中如何保证消息的时序性。文章详细介绍了消息时序性的概念及其重要性,并提出了三种方案:ID设计(借鉴微信号段与跳跃式生成)、单聊场景下的单点序列化同步,以及群聊场景中的单点序列化处理。此外,还提供了多种优化方法,如消息时序对齐、本地时序记录等,帮助读者更好地解决消息乱序问题。适合所有关心即时通讯和社交应用技术细节的开发者阅读。
9 4
|
存储 编解码 安全
现代IM系统中聊天消息的同步和存储方案探讨
本文原作者:木洛,阿里云高级技术专家,内容有删减和修订,感谢原作者。 1、前言 IM全称是『Instant Messaging』,中文名是即时通讯。在这个高度信息化的移动互联网时代,生活中IM类产品已经成为必备品,比较有名的如钉钉、微信、QQ等以IM为核心功能的产品。
5084 0
|
3月前
|
消息中间件 存储 网络性能优化
消息队列 MQ产品使用合集之一个设备的离线消息的数量限制是多少
阿里云消息队列MQ(Message Queue)是一种高可用、高性能的消息中间件服务,它允许您在分布式应用的不同组件之间异步传递消息,从而实现系统解耦、流量削峰填谷以及提高系统的可扩展性和灵活性。以下是使用阿里云消息队列MQ产品的关键点和最佳实践合集。
|
4月前
|
移动开发 小程序 Go
【社区每周】小程序消息订阅插件升级为消息订阅接口(2022年8月第五期)
【社区每周】小程序消息订阅插件升级为消息订阅接口(2022年8月第五期)
35 0
|
消息中间件 存储 RocketMQ
实时更新消息消费队列与索引文件流程说明|学习笔记
快速学习实时更新消息消费队列与索引文件流程说明
实时更新消息消费队列与索引文件流程说明|学习笔记
|
消息中间件 存储 RocketMQ
消息达到后实时推送机制|学习笔记
快速学习消息达到后实时推送机制
消息达到后实时推送机制|学习笔记
|
NoSQL Redis 开发者
数据类型-案例:微信接收消息顺序控制| 学习笔记
快速学习数据类型-案例:微信接收消息顺序控制
269 0
数据类型-案例:微信接收消息顺序控制| 学习笔记
|
JSON 网络协议 测试技术
海量用户通讯系统-服务器接收消息2|学习笔记
快速学习海量用户通讯系统-服务器接收消息2
海量用户通讯系统-服务器接收消息2|学习笔记
|
缓存 NoSQL Redis
语音平台开发,正确处理缓存中过期的数据
语音平台开发,正确处理缓存中过期的数据
|
消息中间件 存储 数据采集
CreateDirectStream 消费数据补充|学习笔记
快速学习 CreateDirectStream 消费数据补充