您的位置:首页 > 其它

healthkit框架使用

2016-03-28 17:55 483 查看
       最近项目需要,可能需要在原有的自行车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);

                                               
                    
4000
                      }

                                           
                                       }];

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 alloc] initWithSampleType: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:11] doubleValue:length];
    HKQuantitySample *temperatureSample2 = [HKQuantitySample quantitySampleWithType:quantityTypeIdentifier quantity:quantity startDate:startDate endDate:endDate metadata:nil];
    HKHealthStore *store = [[HKHealthStore alloc] init];
    [store saveObject:temperatureSample2 withCompletion:^(BOOL success, NSError *error)
{
        if (success) {

            
            NSLog(@"保存成功");

            
        }else {

            
            NSLog(@"保存失败");

            
        }
    }];

下面是代码github的链接https://github.com/WadeZhanggp/Healthkit-Demo
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  healthkit