2017-06-20 80 views
0

我想从Health Kit获得步骤,其工作正常,但当我连接Apple Watch我的应用获得更多步骤,然后Health kit。我跟踪它,发现它收集了步骤的详细记录,但是健康工具箱中的总步骤少于详细信息。如何获取以前的日期的HealthKit总步骤

我的应用让这些步骤的总和:

enter image description here

但我希望得到这些:

enter image description here

这里是我的代码:

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

[Aggregated CMPedometerData(iPhone + Watch total count)](https://stackoverflow.com/questions/44580730/aggregated-cmpedometerdata-iphone-watch-total-count) –

回答

1

你应该使用HKStatisticsQueryHKStatisticsCollectionQuery而不是HKSampleQuery。统计信息查询将去除不同来源的重叠步骤样本,以确保您不会对它们进行重复计数。你可以找到它们的文档herehere

+0

可能与“HKStatisticsCollectionQuery”完成谢谢:-) –

相关问题