对于iOS healthkit,如何保存收缩压和舒张压值?

时间:2014-09-03 11:16:32

标签: iphone ios8 health-kit

以下是在保健套件中保存血压数据的代码

 HKUnit *BPunit = [HKUnit millimeterOfMercuryUnit];
 HKQuantity *BPSysQuantity = [HKQuantity quantityWithUnit:BPunit doubleValue:150.0];
 HKQuantityType *BPSysType = [HKQuantityType quantityTypeForIdentifier:HKQuantityTypeIdentifierBloodPressureSystolic];
 HKQuantitySample *BPSysSample = [HKQuantitySample quantitySampleWithType:BPSysType quantity:BpsysQuantity startDate:now endDate:now];
 [self.healthStore saveObject:BPSysSample withCompletion:^(BOOL success, NSError *error) 

同样适用于舒张压,

但是如何将两者结合起来作为健康应用程序中的单个条目?目前,在健康应用程序中为心脏收缩压和舒张压保存了两个不同的条目。

5 个答案:

答案 0 :(得分:9)

- (void)saveBloodPressureIntoHealthStore:(double)Systolic Dysbp:(double)Diastolic {

HKUnit *BloodPressureUnit = [HKUnit millimeterOfMercuryUnit];

HKQuantity *SystolicQuantity = [HKQuantity quantityWithUnit:BloodPressureUnit doubleValue:Systolic];
HKQuantity *DiastolicQuantity = [HKQuantity quantityWithUnit:BloodPressureUnit doubleValue:Diastolic];

HKQuantityType *SystolicType = [HKQuantityType quantityTypeForIdentifier:HKQuantityTypeIdentifierBloodPressureSystolic];
HKQuantityType *DiastolicType = [HKQuantityType quantityTypeForIdentifier:HKQuantityTypeIdentifierBloodPressureDiastolic];

NSDate *now = [NSDate date];

HKQuantitySample *SystolicSample = [HKQuantitySample quantitySampleWithType:SystolicType quantity:SystolicQuantity startDate:now endDate:now];
HKQuantitySample *DiastolicSample = [HKQuantitySample quantitySampleWithType:DiastolicType quantity:DiastolicQuantity startDate:now endDate:now];

NSSet *objects=[NSSet setWithObjects:SystolicSample,DiastolicSample, nil];
HKCorrelationType *bloodPressureType = [HKObjectType correlationTypeForIdentifier:
                                 HKCorrelationTypeIdentifierBloodPressure];
HKCorrelation *BloodPressure = [HKCorrelation correlationWithType:bloodPressureType startDate:now endDate:now objects:objects];
                                [self.healthStore saveObject:BloodPressure withCompletion:^(BOOL success, NSError *error) {
    if (!success) {
        NSLog(@"An error occured saving the height sample %@. In your app, try to handle this gracefully. The error was: %@.", BloodPressure, error);
        abort();
    }
    [_activity stopAnimating];
    UIAlertView *savealert=[[UIAlertView alloc]initWithTitle:@"HealthDemo" message:@"Blood Pressure values has been saved to Health App" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
    [savealert show];

}];
}

答案 1 :(得分:2)

查看 HKCorrelation 。相关性是一组相关对象,旨在表示血压读数和食物等内容。您可以像样本一样保存创建和保存关联,并且可以使用 HKCorrelationQuery 查询关联。

答案 2 :(得分:2)

Swift:iOS:拯救血压:

private func saveBloodPressureIntoHealthStore(bloodPressureValueSystolic:Double
        ,bloodPressureValueDiastolic:Double) -> Void {

            // Save the user's blood pressure into HealthKit.
            let bloodPressureUnit: HKUnit = HKUnit.millimeterOfMercuryUnit()

            let bloodPressureSystolicQuantity: HKQuantity = HKQuantity(unit: bloodPressureUnit, doubleValue: bloodPressureValueSystolic)

            let bloodPressureDiastolicQuantity: HKQuantity = HKQuantity(unit: bloodPressureUnit, doubleValue: bloodPressureValueDiastolic)

            let bloodPressureSystolicType: HKQuantityType = HKQuantityType.quantityTypeForIdentifier(HKQuantityTypeIdentifierBloodPressureSystolic)

            let bloodPressureDiastolicType: HKQuantityType = HKQuantityType.quantityTypeForIdentifier(HKQuantityTypeIdentifierBloodPressureDiastolic)

            let nowDate: NSDate = NSDate()

            let bloodPressureSystolicSample: HKQuantitySample = HKQuantitySample(type: bloodPressureSystolicType
                , quantity: bloodPressureSystolicQuantity, startDate: nowDate, endDate: nowDate)

            let bloodPressureDiastolicSample: HKQuantitySample = HKQuantitySample(type: bloodPressureDiastolicType
                , quantity: bloodPressureDiastolicQuantity, startDate: nowDate, endDate: nowDate)

            let completion: ((Bool, NSError!) -> Void) = {
                (success, error) -> Void in

                if !success {
                    println("An error occured saving the Blood pressure sample \(bloodPressureSystolicSample). In your app, try to handle this gracefully. The error was: \(error).")

                    abort()
                }

            }// end completion

            var objects : NSSet = NSSet(objects: bloodPressureSystolicSample,bloodPressureDiastolicSample)

            var bloodPressureType: HKCorrelationType = HKObjectType.correlationTypeForIdentifier(HKCorrelationTypeIdentifierBloodPressure)

            var bloodPressureCorrelation : HKCorrelation = HKCorrelation(type: bloodPressureType, startDate: nowDate
                , endDate: nowDate, objects: objects)

            self.healthStore!.saveObject(bloodPressureCorrelation, withCompletion: completion)

    }// end saveBloodPressureIntoHealthStore

答案 3 :(得分:2)

Swift 3

func saveBloodPressure(systolic systolicValue: Double, diastolic diastolicValue: Double, completion completionBlock: @escaping (Bool, Error?) -> Void) {
    let unit = HKUnit.millimeterOfMercury()

    let systolicQuantity = HKQuantity(unit: unit, doubleValue: systolicValue)
    let diastolicQuantity = HKQuantity(unit: unit, doubleValue: diastolicValue)

    let systolicType = HKQuantityType.quantityType(forIdentifier: .bloodPressureSystolic)!
    let diastolicType = HKQuantityType.quantityType(forIdentifier: .bloodPressureDiastolic)!

    let nowDate = Date()
    let systolicSample = HKQuantitySample(type: systolicType, quantity: systolicQuantity, start: nowDate, end: nowDate)
    let diastolicSample = HKQuantitySample(type: diastolicType, quantity: diastolicQuantity, start: nowDate, end: nowDate)

    let objects: Set<HKSample> = [systolicSample, diastolicSample]
    let type = HKObjectType.correlationType(forIdentifier: .bloodPressure)!
    let correlation = HKCorrelation(type: type, start: nowDate, end: nowDate, objects: objects)

    self.healthKitStore.save(correlation) { (success, error) -> Void in
        if !success {
            print("An error occured saving the Blood pressure sample \(systolicSample). In your app, try to handle this gracefully. The error was: \(error).")
        }
        completionBlock(success, error)
    }
}

答案 4 :(得分:1)

Xamarin.iOS解决方案

 public void SaveBloodPressure(DateTime date, double systolic, double diastolic, double beatsPerMinute)
    {
        using (var healthKitStore = new HKHealthStore())
        {
            var heartRateUnitType = HKUnit.MillimeterOfMercury;
            var diastolicQuantity = HKQuantity.FromQuantity(heartRateUnitType, diastolic);

            var diastolicQuantityType = HKQuantityType.GetQuantityType(HKQuantityTypeIdentifierKey.BloodPressureDiastolic);
            var diastolicSample = HKQuantitySample.FromType(diastolicQuantityType, diastolicQuantity, date.ToUniversalTime().ToNSDate(), date.ToUniversalTime().ToNSDate(), new HKMetadata());


            var systolicQuantity = HKQuantity.FromQuantity(heartRateUnitType, systolic);

            var systolicQuantityType = HKQuantityType.GetQuantityType(HKQuantityTypeIdentifierKey.BloodPressureSystolic);
            var systolicSample = HKQuantitySample.FromType(systolicQuantityType, systolicQuantity, date.ToUniversalTime().ToNSDate(), date.ToUniversalTime().ToNSDate(), new HKMetadata());

            var objects = new NSSet(systolicSample, diastolicSample);
            var bloodPressureType = HKCorrelationType.GetCorrelationType(HKCorrelationTypeKey.IdentifierBloodPressure);
            var bloodPressure = HKCorrelation.Create(bloodPressureType, date.ToUniversalTime().ToNSDate(), date.ToUniversalTime().ToNSDate(), objects);

            try
            {
                healthKitStore.SaveObject(bloodPressure, (success, error) =>
                {                        
                    //action to take on success/failure
                });
            }
            catch (Exception)
            {                   
               //handle exception
            }               
            try
            {
                var beatsPerMinuteUnits = HKUnit.Count.UnitDividedBy(HKUnit.Minute);
                var beatsPerMinuteQuantity = HKQuantity.FromQuantity(beatsPerMinuteUnits, beatsPerMinute);

                var heartRateQuantityType = HKQuantityType.GetQuantityType(HKQuantityTypeIdentifierKey.HeartRate);
                var heartRateSample = HKQuantitySample.FromType(heartRateQuantityType, beatsPerMinuteQuantity, date.ToUniversalTime().ToNSDate(), date.ToUniversalTime().ToNSDate(), new HKMetadata());
                healthKitStore.SaveObject(heartRateSample, (success, error) =>
                {
                    //handle success / failure
                });
            }
            catch (Exception)
            {
                //handle exception                
            }                
        }
    }