For iOS healthkit how to save systolic and diastolic blood pressure values?
Asked Answered
O

5

7

Here is code for saving blood pressure data in 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) 

same way for diastolic also,

But how to save both combine as single entry in health app? Currently two diffrent entries are saved for systolic and diastolic blood pressure in health app.

Ovary answered 3/9, 2014 at 11:16 Comment(0)
O
11
- (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];

}];
}
Ovary answered 15/9, 2014 at 13:7 Comment(3)
Great answer. Save me a lot of troubleDispersoid
Nice one. I would change back to the main queue thread when the call succeed by putting the code that changes the UI inside a dispatch_async(dispatch_get_main_queue(), ^{}); Briquet
Great answer pradip. But, can u please give me proper example how to call this method?Arbitress
A
4

In 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)
    }
}
Adkisson answered 15/1, 2017 at 7:50 Comment(0)
C
3

Check out HKCorrelation. A correlation is a set of related objects and is designed to represent things like blood pressure readings and food. You can save create and save correlations just like samples and you can query for correlations using HKCorrelationQuery.

Clipping answered 8/9, 2014 at 16:30 Comment(0)
L
3

Swift : iOS : Save Blood Pressure:

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
Loreeloreen answered 3/12, 2014 at 9:54 Comment(0)
C
3

Xamarin.iOS solution

 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                
            }                
        }
    }
Complected answered 4/8, 2015 at 3:6 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.