HealthKit 初试

想要做HealthKit,电脑上安装的profile的APP ID 必须包含HealthKit服务。


先来做个测试的。


在developer中新建一个App ID,

选择App ID Suffix  —>  Explicit APP ID ,一定要输入全名的,不能带*号 —>  APP services, 这里一定要勾选 HealthKit,剩下的根据所需一直continue。

然后新建一个作为developer 用的 profile, app id 选刚才新建的那个带有HealthKit的然后按需continue,最后下载下来安装上。


在Xcode中新建一个空工程,先导入HealthKit.framework这个库

打开新工程的targets,在Capabilities中找到



当然刚开始的时候是关闭状态,你要打开它,然后选择下面的 Fix使得上面几项都为“√”

这时候会在目录树中看到:



这说明已经申请成功了Healthkit服务。


在使用服务前,要先检查设备是否支持HealthKit服务

    if ([HKHealthStore isHealthDataAvailable]) {
        self.healthStore = [[HKHealthStore alloc] init];
        
        
        /*
         组装需要读写的数据类型
         */
        NSSet *writeDataTypes = [self dataTypesToWrite];
        NSSet *readDataTypes = [self dataTypesRead];
        
        /*
         注册需要读写的数据类型,也可以在“健康”APP中重新修改
         */
        [self.healthStore requestAuthorizationToShareTypes:writeDataTypes readTypes:readDataTypes completion:^(BOOL success, NSError *error) {
            if (!success) {
                NSLog(@"%@\n\n%@",error, [error userInfo]);
                return ;
            }
            else
            {
                dispatch_async(dispatch_get_main_queue(), ^{
                    [self.window.rootViewController presentViewController:tabVC animated:YES completion:nil];
                });
            }
        }];
    }

- (NSSet *)dataTypesToWrite
{
    HKQuantityType *heightType = [HKObjectType quantityTypeForIdentifier:HKQuantityTypeIdentifierHeight];
    HKQuantityType *weightType = [HKObjectType quantityTypeForIdentifier:HKQuantityTypeIdentifierBodyMass];
    HKQuantityType *temperatureType = [HKQuantityType quantityTypeForIdentifier:HKQuantityTypeIdentifierBodyTemperature];
    
    return [NSSet setWithObjects:heightType, temperatureType, weightType, nil];
}

- (NSSet *)dataTypesRead
{
    HKQuantityType *heightType = [HKObjectType quantityTypeForIdentifier:HKQuantityTypeIdentifierHeight];
    HKQuantityType *weightType = [HKObjectType quantityTypeForIdentifier:HKQuantityTypeIdentifierBodyMass];
    HKQuantityType *temperatureType = [HKObjectType quantityTypeForIdentifier:HKQuantityTypeIdentifierBodyTemperature];
    HKCharacteristicType *birthdayType = [HKObjectType characteristicTypeForIdentifier:HKCharacteristicTypeIdentifierDateOfBirth];
    HKCharacteristicType *sexType = [HKObjectType characteristicTypeForIdentifier:HKCharacteristicTypeIdentifierBiologicalSex];
    
    return [NSSet setWithObjects:heightType, temperatureType,birthdayType,sexType,weightType, nil];
}

如果正常的情况,会在启动的时候弹出一个窗口提示请求服务


可以提示用户自己选择同意APP读写的数据类型。




一般数据的保存:


- (void)saveTemperatureIntoHealthStore:(double)temperature
{
    /* 
     要保存的数据类型
     对于温度、体重都有不同的显示方式

     比如温度:
         @interface HKUnit (Temperature)
         + (instancetype)degreeCelsiusUnit;          // degC
         + (instancetype)degreeFahrenheitUnit;       // degF
         + (instancetype)kelvinUnit;                 // K
         @end
     */
    HKUnit *temperatureUnit;
    
    if (_unitSeg.selectedSegmentIndex == 0)
    {
        temperatureUnit = [HKUnit degreeCelsiusUnit];
    }
    else
    {
        temperatureUnit = [HKUnit degreeFahrenheitUnit];
    }
    
    /*
     HKQuantity 将要保存的数据转换成 HealthKit 中通用的数据模型
     */
    HKQuantity *temperatureQuantity = [HKQuantity quantityWithUnit:temperatureUnit doubleValue:temperature];
    
    /*
     HKQuantityType 要将HKQuantity保存到的健康数据类型,比如体温、体重、身高等…………
     */
    HKQuantityType *temperatureType = [HKQuantityType quantityTypeForIdentifier:HKQuantityTypeIdentifierBodyTemperature];
    
    /*
     保存数据的时间,开始和结束,为了实时保存就都为同一个时间
     */
    NSDate *date = [NSDate date];
    
    HKQuantitySample *temperatureSample = [HKQuantitySample quantitySampleWithType:temperatureType quantity:temperatureQuantity startDate:date endDate:date];
    
    /*
     调用 apple 的接口保存数据
     */
    [SHAREAPP.healthStore saveObject:temperatureSample withCompletion:^(BOOL success, NSError *error) {
        if (!success)
        {
            NSLog(@"\n**************************\n %@ \n\n%@\n\n%@\n**************************",NSStringFromSelector(_cmd),error, [error userInfo]);
            abort();
        }
        else
            [self updateUserTemperature];
    }];
}


对于生理性别、生日、血型,则不能让用户写入,只提供读取操作。


对于出生日期的读取,只是一句话,然后需要自己计算

    NSError *error;
    NSDate *dateOfBirth = [SHAREAPP.healthStore dateOfBirthWithError:&error];



对于性别的 读取

    NSError *error ;
    HKBiologicalSexObject *sexObject = [SHAREAPP.healthStore biologicalSexWithError:&error];

使用
sexObject.biologicalSex
获取性别信息,这是一个枚举值

typedef NS_ENUM(NSInteger, HKBiologicalSex) {
    HKBiologicalSexNotSet = 0,
    HKBiologicalSexFemale,
    HKBiologicalSexMale,
} NS_ENUM_AVAILABLE_IOS(8_0);


对于其他数据的读取

需要提供读取的生理数据类型

HKQuantityType *weightType = [HKQuantityType quantityTypeForIdentifier:HKQuantityTypeIdentifierBodyMass];
然后直接类似的coredata的query

- (void)appl_mostRecentQuantitySampleOfType:(HKQuantityType *)quantityType predicate:(NSPredicate *)predicate completions:(void (^)(NSArray *, NSError *))completion
{
    NSSortDescriptor *timeSortDescriptor = [[NSSortDescriptor alloc] initWithKey:HKSampleSortIdentifierEndDate ascending:NO];
    
    HKSampleQuery *query = [[HKSampleQuery alloc] initWithSampleType:quantityType predicate:nil limit:HKObjectQueryNoLimit sortDescriptors:@[timeSortDescriptor] resultsHandler:^(HKSampleQuery *query, NSArray *results, NSError *error) {
        
        if (!results)
        {
            if (completion)
            {
                completion(nil, error);
            }
            return ;
        }
        
        if (completion)
        {
            completion(results, error);
        }
        
    }];
    
    [self executeQuery:query];
}

返回的数组中都是  HKQuantitySample 类型的生理数据的实例,包含着数据的类型和这个数据的量值与计量单位(HKQuantity)

HKQuantity数据不能直接使用,需要进行转换。

先定义一个数据类型:

HKUnit *heightUnit = [HKUnit inchUnit];
然后转换

double usersHeight = [quantity doubleValueForUnit:heightUnit];

此时的数据就能按需来正常使用了。


但是需要注意的是:

在保存的时候注意数据的单位,读的时候更要注意。



内容概要:该PPT详细介绍了企业架构设计的方法论,涵盖业务架构、数据架构、应用架构和技术架构四大核心模块。首先分析了企业架构现状,包括业务、数据、应用和技术四大架构的内容和关系,明确了企业架构设计的重要性。接着,阐述了新版企业架构总体框架(CSG-EAF 2.0)的形成过程,强调其融合了传统架构设计(TOGAF)和领域驱动设计(DDD)的优势,以适应数字化转型需求。业务架构部分通过梳理企业级和专业级价值流,细化业务能力、流程和对象,确保业务战略的有效落地。数据架构部分则遵循五大原则,确保数据的准确、一致和高效使用。应用架构方面,提出了分层解耦和服务化的设计原则,以提高灵活性和响应速度。最后,技术架构部分围绕技术框架、组件、平台和部署节点进行了详细设计,确保技术架构的稳定性和扩展性。 适合人群:适用于具有一定企业架构设计经验的IT架构师、项目经理和业务分析师,特别是那些希望深入了解如何将企业架构设计与数字化转型相结合的专业人士。 使用场景及目标:①帮助企业和组织梳理业务流程,优化业务能力,实现战略目标;②指导数据管理和应用开发,确保数据的一致性和应用的高效性;③为技术选型和系统部署提供科学依据,确保技术架构的稳定性和扩展性。 阅读建议:此资源内容详尽,涵盖企业架构设计的各个方面。建议读者在学习过程中,结合实际案例进行理解和实践,重点关注各架构模块之间的关联和协同,以便更好地应用于实际工作中。
资 源 简 介 独立分量分析(Independent Component Analysis,简称ICA)是近二十年来逐渐发展起来的一种盲信号分离方法。它是一种统计方法,其目的是从由传感器收集到的混合信号中分离相互独立的源信号,使得这些分离出来的源信号之间尽可能独立。它在语音识别、电信和医学信号处理等信号处理方面有着广泛的应用,目前已成为盲信号处理,人工神经网络等研究领域中的一个研究热点。本文简要的阐述了ICA的发展、应用和现状,详细地论述了ICA的原理及实现过程,系统地介绍了目前几种主要ICA算法以及它们之间的内在联系, 详 情 说 明 独立分量分析(Independent Component Analysis,简称ICA)是近二十年来逐渐发展起来的一种盲信号分离方法。它是一种统计方法,其目的是从由传感器收集到的混合信号中分离相互独立的源信号,使得这些分离出来的源信号之间尽可能独立。它在语音识别、电信和医学信号处理等信号处理方面有着广泛的应用,目前已成为盲信号处理,人工神经网络等研究领域中的一个研究热点。 本文简要的阐述了ICA的发展、应用和现状,详细地论述了ICA的原理及实现过程,系统地介绍了目前几种主要ICA算法以及它们之间的内在联系,在此基础上重点分析了一种快速ICA实现算法一FastICA。物质的非线性荧光谱信号可以看成是由多个相互独立的源信号组合成的混合信号,而这些独立的源信号可以看成是光谱的特征信号。为了更好的了解光谱信号的特征,本文利用独立分量分析的思想和方法,提出了利用FastICA算法提取光谱信号的特征的方案,并进行了详细的仿真实验。 此外,我们还进行了进一步的研究,探索了其他可能的ICA应用领域,如音乐信号处理、图像处理以及金融数据分析等。通过在这些领域中的实验和应用,我们发现ICA在提取信号特征、降噪和信号分离等方面具有广泛的潜力和应用前景。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值