2017-06-20 1 views
0

Ich versuche Schritte von Health Kit zu bekommen, es funktioniert gut für mobile, aber wenn ich verbinde Apple Watch meine App bekommen mehr Schritte dann Health kit. Ich trace es und finde, dass es Detailsatz von Schritten sammelt, aber Gesamtschritte sind weniger als Detail im Gesundheitspaket.Wie bekomme ich HealthKit Schritte für alle vorherigen Daten

Meine App die Summe dieser Schritte erhalten:

enter image description here

Aber ich diese erhalten möchten:

enter image description here

Hier ist mein Code:

func MultipleDaysStepsAndActivitiesTest(_ startDate:Date, completion: @escaping (NSDictionary, [HealthKitManuallActivity], NSError?) ->()) { 
    let type = HKSampleType.quantityType(forIdentifier: HKQuantityTypeIdentifier.stepCount) // The type of data we are requesting 

    let now = Date() 

    let newDate = startDate 

    let predicate = HKQuery.predicateForSamples(withStart: newDate, end: now, options: HKQueryOptions()) 

    var dates = now.datesBetweenGivenDates(startDate,endDate:now) 
    dates = dates.reversed() 

    let query = HKSampleQuery(sampleType: type!, predicate: predicate, limit: 0, sortDescriptors: nil) { query, results, error in 

     var dict:[String:Double] = [:] 

     if results?.count > 0 { 

      for result in results as! [HKQuantitySample] { 
       print(result) 
       if result.sourceRevision.source.name != kHealthKitSource { 

        if dict[self.fmt.string(from: result.startDate)] != nil { 
         dict[self.fmt.string(from: result.startDate)] = dict[self.fmt.string(from: result.startDate)]! + result.quantity.doubleValue(for: HKUnit.count()) 

        } else { 
         dict[self.fmt.string(from: result.startDate)] = result.quantity.doubleValue(for: HKUnit.count()) 
        } 
       } 
      } 
     } 

     var sDate = startDate // first date 
     let cal = Calendar.current 
     print(dict) 

     if dict.isEmpty { 

      while sDate <= Date() { 
       dict[self.fmt.string(from: sDate)] = 0 
       sDate = cal.date(byAdding: .day, value: 1, to: sDate)! 
      } 

     } else { 

      while sDate <= Date() { 

       if dict[self.fmt.string(from: sDate)] == nil { 
        dict[self.fmt.string(from: sDate)] = 0 
       } 

       sDate = cal.date(byAdding: .day, value: 1, to: sDate)! 
      } 
     } 

     // reading activities 
     self.MultipleDaysWorkouts(startDate, endDate: now, completion: { (activities, error) in 

      if results?.count == 0 { 

       for activity in activities { 
        dict[activity.startDate] = 0.0 
       } 
      } 

      // reading mindfulness activities 

      self.MultipleDayMindFullnessActivity(startDate, completion: { (mindfulnessActivities, mindError) in 

       if mindError == nil { 

        let allActivities = mindfulnessActivities + activities 
        completion(dict as NSDictionary, allActivities, mindError as NSError?) 

       } 

      }) 

     }) 

    } 

    execute(query) 
} 
+0

Mögliche Duplikate von [Aggregierte CMPedometerData (iPhone + Watch Gesamtanzahl)] (https://stackoverflow.com/questions/44580730/aggregated-cmpedometerdata-iphone-watch-total-count) –

Antwort

1

Sie solltenverwendenoder HKStatisticsCollectionQuery anstelle von HKSampleQuery. Die Statistikabfragen de-deuplicate überlappende Schrittproben aus verschiedenen Quellen, um sicherzustellen, dass Sie sie nicht doppelt zählen. Sie finden die Dokumentation für sie here und here.

+0

es ist getan mit 'HKStatisticsCollectionQuery' Dank :-) –

Verwandte Themen