For iOS healthkit how to save systolic and diastol

2019-05-08 06:49发布

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.

5条回答
来,给爷笑一个
2楼-- · 2019-05-08 07:06

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)
    }
}
查看更多
你好瞎i
3楼-- · 2019-05-08 07:17

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.

查看更多
何必那么认真
4楼-- · 2019-05-08 07:18
- (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];

}];
}
查看更多
再贱就再见
5楼-- · 2019-05-08 07:24

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                
            }                
        }
    }
查看更多
Emotional °昔
6楼-- · 2019-05-08 07:25

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
查看更多
登录 后发表回答