2016-07-22 15 views
3

abfragen Ich muss HKStatistics für durchschnittliche Herzfrequenz abfragen, mit Swift 2.2. Ich habe aus der Forschung gelernt, die Parameter, die ich brauche, ist HKStatisticsOptionDiscreteAverageWie Healthkit für durchschnittliche Herzfrequenz mit Swift

Ich habe Code für die Workout-Sitzung. Wie kann ich diesem Code unterhalb der Herzfrequenz-Messung die Funktion hinzufügen, um den Herzfrequenz-Durchschnitt der Trainingseinheit mit HKStatisticsOptionDiscreteAverage zurückzugeben?

func createHeartRateStreamingQuery(workoutStartDate: NSDate) -> HKQuery? { 
    // adding predicate will not work 
    // let predicate = HKQuery.predicateForSamplesWithStartDate(workoutStartDate, endDate: nil, options: HKQueryOptions.None) 

    guard let quantityType = HKObjectType.quantityTypeForIdentifier(HKQuantityTypeIdentifierHeartRate) else { return nil } 

    let heartRateQuery = HKAnchoredObjectQuery(type: quantityType, predicate: nil, anchor: anchor, limit: Int(HKObjectQueryNoLimit)) { (query, sampleObjects, deletedObjects, newAnchor, error) -> Void in 
     guard let newAnchor = newAnchor else {return} 
     self.anchor = newAnchor 
     self.updateHeartRate(sampleObjects) 
    } 

    heartRateQuery.updateHandler = {(query, samples, deleteObjects, newAnchor, error) -> Void in 
     self.anchor = newAnchor! 
     self.updateHeartRate(samples) 
    } 
    return heartRateQuery 
} 

func updateHeartRate(samples: [HKSample]?) { 
    guard let heartRateSamples = samples as? [HKQuantitySample] else {return} 

    dispatch_async(dispatch_get_main_queue()) { 
     guard let sample = heartRateSamples.first else{return} 
     let value = sample.quantity.doubleValueForUnit(self.heartRateUnit) 
     self.label.setText(String(UInt16(value))) 

     // retrieve source from sample 
     let name = sample.sourceRevision.source.name 
     self.updateDeviceName(name) 
     self.animateHeart() 
    } 
} 
+0

hast du das lösen? – MagicFlow

+0

keine sorry ich habe keine antworten –

Antwort

0

dies ist Objective-C Beispiel die durchschnittliche Herz BPM bekommen:

HKQuantityType *typeHeart =[HKQuantityType quantityTypeForIdentifier:HKQuantityTypeIdentifierHeartRate]; 
NSPredicate *predicate = [HKQuery predicateForSamplesWithStartDate:startDate endDate:endDate options:HKQueryOptionStrictStartDate]; 

HKStatisticsQuery *squery = [[HKStatisticsQuery alloc] initWithQuantityType:typeHeart quantitySamplePredicate:predicate options:HKStatisticsOptionDiscreteAverage completionHandler:^(HKStatisticsQuery *query, HKStatistics *result, NSError *error) { 
    dispatch_async(dispatch_get_main_queue(), ^{ 
     HKQuantity *quantity = result.averageQuantity; 
     double beats = [quantity doubleValueForUnit:[[HKUnit countUnit] unitDividedByUnit:[HKUnit minuteUnit]]]; 
     NSLog(@"got: %@", [NSString stringWithFormat:@"%.f",beats]) ; 

     } 
    ); 

}]; 
[self.healthStore executeQuery:squery]; 
0
func getAVGHeartRate() { 

    var typeHeart = HKQuantityType.quantityType(forIdentifier: .heartRate) 
    var startDate = Date() - 7 * 24 * 60 * 60 // start date is a week 
    var predicate: NSPredicate? = HKQuery.predicateForSamples(withStart: startDate, end: Date(), options: HKQueryOptions.strictEndDate) 

    var squery = HKStatisticsQuery(quantityType: typeHeart!, quantitySamplePredicate: predicate, options: .discreteAverage, completionHandler: {(query: HKStatisticsQuery,result: HKStatistics?, error: Error?) -> Void in 
     DispatchQueue.main.async(execute: {() -> Void in 
      var quantity: HKQuantity? = result?.averageQuantity() 
      var beats: Double? = quantity?.doubleValue(for: HKUnit.count().unitDivided(by: HKUnit.minute())) 
      print("got: \(String(format: "%.f", beats!))") 
     }) 
     }) 
    healthStore.execute(squery) 
} 

die Version Swift 3 Dieses ist :)