healthkit框架使用

       最近项目需要,可能需要在原有的自行车APP上添加healthkit框架,所以就查看了一些healthkit的资料,发现code4APP竟然没有,github上面的资料也比较少,还有不少用swift写的,自己就研究用oc写healthkit。比较3月21号的苹果发布会虽然出了se手机并不出色,但是更加突出了环境和健康,healthkit在未来医疗健康、运动锻炼领域应该会大有所为。

1、要使用healthkit框架首先要在capabilities里面打开health kit


2、判断设备是否能够使用healthkit框架

- (BOOL)isHealthDataAvailable{

    

    return [HKHealthStore isHealthDataAvailable];

    

}


3、请求授权设置,所有的设备要请求授权成功后才能进行使用healthkit的方法操作

//一组包含要共享的数据类型,可以写入的数据

    NSSet *shareObjectTypes = [NSSet setWithObjects:

                               //[HKObjectType quantityTypeForIdentifier:HKQuantityTypeIdentifierDistanceWalkingRunning],

                               //[HKObjectType quantityTypeForIdentifier:HKQuantityTypeIdentifierStepCount],

                               [HKObjectType quantityTypeForIdentifier:HKQuantityTypeIdentifierDistanceCycling],

                               nil];

    

    //一组包含要读取的数据类型,可以读取的数据

    NSSet *readObjectTypes  = [NSSet setWithObjects:

                               //[HKObjectType characteristicTypeForIdentifier:HKCharacteristicTypeIdentifierDateOfBirth],

                               [HKObjectType characteristicTypeForIdentifier:HKCharacteristicTypeIdentifierBiologicalSex],

                               //[HKObjectType quantityTypeForIdentifier:HKQuantityTypeIdentifierStepCount],

                               [HKObjectType quantityTypeForIdentifier:HKQuantityTypeIdentifierDistanceCycling],

                               //[HKObjectType quantityTypeForIdentifier:HKQuantityTypeIdentifierDistanceWalkingRunning],

                               [HKObjectType quantityTypeForIdentifier:HKQuantityTypeIdentifierBodyMass],

                               [HKObjectType quantityTypeForIdentifier:HKQuantityTypeIdentifierHeight],

                               nil];

    

    // Request access

    [self.healthStore requestAuthorizationToShareTypes:shareObjectTypes

                                        readTypes:readObjectTypes

                                       completion:^(BOOL success, NSError *error) {

                                           

                                           if(success == YES)

                                           {

                                               NSLog(@">>>>>授权成功");

                                           }

                                           else

                                           {

                                               NSLog(@">>>>>授权失败");

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

                                               

                                           }

                                           

                                       }];


4、读取数据


读取性别

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

    NSString *sexString;

    switch ((int)bioSex.biologicalSex) {

        case HKBiologicalSexNotSet:

            sexString = @"NotSet";

            break;

            

        case HKBiologicalSexFemale:

            sexString = @"Female";

            break;

            

        case HKBiologicalSexMale:

            sexString = @"Male";

            break;

            

        case HKBiologicalSexOther:

            sexString = @"Other";

            break;

            

        default:

            break;


读取身高 ,创建好请求类型,其中要注意请求回来的数据是一组数字,可以设置请求数据的起始时间,例子中请求的是身高,请求回结果后我取得是最后一位,最后需要注意把单位换算,转换成需要的数据的类型,如meterUnit, 如果是体重就是克,可以用gramUnit

   HKSampleType *sampleType = [HKSampleType quantityTypeForIdentifier:HKQuantityTypeIdentifierHeight];

    NSDate *startDate, *endDate;

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

    NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:HKSampleSortIdentifierStartDate ascending:YES];

    HKSampleQuery *sampleQuery = [[HKSampleQuery allocinitWithSampleType:sampleType predicate:predicate limit:HKObjectQueryNoLimit sortDescriptors:@[sortDescriptor]resultsHandler:^(HKSampleQuery * _Nonnull query, NSArray<__kindof HKSample *> * _Nullable results, NSError * _Nullable error) {

        

        if (!error && results) {

            HKQuantitySample *samples = [results lastObject];

            double heightMeter = [samples.quantity doubleValueForUnit:[HKUnit meterUnit]];

            if (self.delegate && [self.delegate respondsToSelector:@selector(receiveHealthKitHeight:)]) {

                [self.delegate receiveHealthKitHeight:heightMeter];

            }

        }

        

    }];

    //使函数生效

    [_healthStore executeQuery:sampleQuery];


5、写入数据,其中以写入骑行数据为例,注意创建时间时用[NSDate dateWithTimeIntervalSinceNow:0],这是结束时间,开始时间可以以当前时间为截点,向前推

[NSDate dateWithTimeIntervalSinceNow:-time],请求返回的数据要设置,是枚举类型,11是meter。

NSDate *startDate, *endDate;

    endDate = [NSDate dateWithTimeIntervalSinceNow:0];

    startDate = [NSDate dateWithTimeIntervalSinceNow:-time];

    NSLog(@"startdate = %@, endDate = %@",startDate,endDate);

    NSString *unitIdentifier = HKQuantityTypeIdentifierDistanceCycling;

    HKQuantityType *quantityTypeIdentifier = [HKObjectType quantityTypeForIdentifier:unitIdentifier];

    HKQuantity *quantity = [HKQuantity quantityWithUnit:[HKUnit unitFromLengthFormatterUnit:11doubleValue:length];

    HKQuantitySample *temperatureSample2 = [HKQuantitySample quantitySampleWithType:quantityTypeIdentifier quantity:quantity startDate:startDate endDate:endDate metadata:nil];

    HKHealthStore *store = [[HKHealthStore allocinit];

    [store saveObject:temperatureSample2 withCompletion:^(BOOL success, NSError *error) {

        if (success) {

            

            NSLog(@"保存成功");

            

        }else {

            

            NSLog(@"保存失败");

            

        }

    }];


下面是代码github的链接https://github.com/WadeZhanggp/Healthkit-Demo








  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值