Откуда записывать данные по количеству шагов?

swift

#1

Всем привет!

Делаю фитнес приложение, в котором будут считаться шаги. Использовал CMPedometer из фреймворка Core Motion. Шаги считает корректно. Но считает шаги он только тогда, когда приложение открыто. Как их считать, если приложение, допустим, закрыто? Только методом парсинга из HealtKit?


#2

Ниже код по HealthKit, который так же получает шаги.
Код взят отсюда:

func retrieveStepCount(completion: (stepRetrieved: Double) -> Void) {

    //   Define the Step Quantity Type
    let stepsCount = HKQuantityType.quantityType(forIdentifier: HKQuantityTypeIdentifier.stepCount)

    //   Get the start of the day         
    let date = Date()
    let cal = Calendar(identifier: Calendar.Identifier.gregorian)
    let newDate = cal.startOfDay(for: date)

    //  Set the Predicates & Interval
    let predicate = HKQuery.predicateForSamples(withStart: newDate, end: Date(), options: .strictStartDate)
    var interval = DateComponents()
    interval.day = 1

    //  Perform the Query
    let query = HKStatisticsCollectionQuery(quantityType: stepsCount!, quantitySamplePredicate: predicate, options: [.cumulativeSum], anchorDate: newDate as Date, intervalComponents:interval)

    query.initialResultsHandler = { query, results, error in

        if error != nil {

            //  Something went Wrong
            return
        }

        if let myResults = results{
            myResults.enumerateStatistics(from: self.yesterday, to: self.today) {
                statistics, stop in

                if let quantity = statistics.sumQuantity() {

                    let steps = quantity.doubleValue(for: HKUnit.count())

                    print("Steps = \(steps)")
                    completion(stepRetrieved: steps)

                }
            }
        }


    }

    storage.execute(query)
}

#3

Привет! Огромное спасибо, сейчас протестирую. Но вопрос также остался - данные только придется брать из приложения “Здоровье”?


#4

Шаги считает система. Ваша задача запросить эти данные при открытии вашего приложения, сохранить их при закрытии(если это вам нужно).
Напимер методом queryPedometerData
Описание CMPedometer из документации:
Вы сами не создаете экземпляры этого класса. Вместо этого вы используете CMPedometer объект для запроса данных шагомера из системы. Данные для каждого запроса упаковываются в экземпляр этого класса и доставляются обработчикам, зарегистрированным с помощью объекта шагомера.