Чтение шагов для интервалов дат из HealthKit с помощью Swift
У меня есть этот метод, чтобы прочитать сегодня шаги из HealthKit.
func todaySteps(completion: (Double, NSError?) -> () )
{ // this function gives you all of the steps the user has taken since the beginning of the current day.
let type = HKSampleType.quantityTypeForIdentifier(HKQuantityTypeIdentifierStepCount) // The type of data we are requesting
let date = NSDate()
print(date)
let cal = NSCalendar(calendarIdentifier: NSCalendarIdentifierGregorian)!
let newDate = cal.startOfDayForDate(date)
print(newDate)
let predicate = HKQuery.predicateForSamplesWithStartDate(newDate, endDate: NSDate(), options: .None) // Our search predicate which will fetch all steps taken today
// The actual HealthKit Query which will fetch all of the steps and add them up for us.
let query = HKSampleQuery(sampleType: type!, predicate: predicate, limit: 0, sortDescriptors: nil) { query, results, error in
var steps: Double = 0
if results?.count > 0
{
for result in results as! [HKQuantitySample]
{
steps += result.quantity.doubleValueForUnit(HKUnit.countUnit())
}
}
completion(steps, error)
}
executeQuery(query)
}
Теперь давайте скажем, хочу ли я прочитать общее количество шагов за день с 1 июня /2016 по 7 июня 2016
Как я могу это сделать, пожалуйста, направьте меня, спасибо
1 ответ
Используйте это, чтобы получить шаги нескольких дат
func MultipleDaysStepsAndActivities(_ startDate:Date, completion: @escaping (NSDictionary, [HealthKitManuallActivity], NSError?) -> () ) {
let calender = NSCalendar.current
let now = Date()
_ = calender.component(.year, from: now)
let type = HKSampleType.quantityType(forIdentifier: HKQuantityTypeIdentifier.stepCount) // The type of data we are requesting
let predicate = HKQuery.predicateForSamples(withStart: startDate, end: now, options: HKQueryOptions())
var interval = DateComponents()
interval.day = 1
let query = HKStatisticsCollectionQuery(quantityType: type!, quantitySamplePredicate: predicate, options: [.cumulativeSum], anchorDate: startDate, intervalComponents:interval)
query.initialResultsHandler = { query, results, error in
if error != nil {
print(error as Any)
return
}
var dict:[String:Double] = [:]
if let myResults = results {
myResults.enumerateStatistics(from: startDate, to: now) {
statistics, stop in
if let quantity = statistics.sumQuantity() {
let steps = quantity.doubleValue(for: HKUnit.count())
print("Steps = \(steps.rounded())")
dict[self.fmt.string(from: statistics.startDate)] = steps.rounded()
}
}
}
}
execute(query)
}