Ходьба с ResearchKit не возвращает данные о частоте сердечных сокращений

Я работаю над своим первым проектом ResearchKit. Я пытаюсь получить данные о частоте сердечных сокращений через Apple HealthKit. Я тестирую программу на своем телефоне, и у меня есть часы Apple с данными о здоровье, они должны быть доступны. Ходьба запускается и успешно завершается, и я могу проанализировать файлы результатов. Но я обнаружил, что файлы результатов содержат только данные физического датчика (акселерометр и гироскоп), а НЕ данные о состоянии здоровья.

Что меня немного беспокоит, так это то, что я вижу эти 2 предупреждения на выходе консоли, когда запускается прогулочное задание:

ORKSample[511:80256] [ResearchKit][Warning] __82-[ORKTaskViewController requestHealthStoreAccessWithReadTypes:writeTypes:handler:]_block_invoke Health access: error=(null)
2016-04-07 16:31:28.097 ORKSample[511:80630] [ResearchKit][Warning] __59-[ORKTaskViewController requestPedometerAccessWithHandler:]_block_invoke Pedometer access: error=(null)

Кажется, что _block_invole Health access а также _block_invoke Pedometer access не может быть хорошим

Вот код, который я использую для авторизации данных о здоровье:

import ResearchKit
import HealthKit

class HealthDataStep: ORKInstructionStep {
    // MARK: Properties

    let healthDataItemsToRead: Set<HKObjectType> = [
        HKObjectType.characteristicTypeForIdentifier(HKCharacteristicTypeIdentifierDateOfBirth)!,
        HKObjectType.quantityTypeForIdentifier(HKQuantityTypeIdentifierHeight)!,
        HKObjectType.quantityTypeForIdentifier(HKQuantityTypeIdentifierBodyMass)!,
        HKObjectType.quantityTypeForIdentifier(HKQuantityTypeIdentifierHeartRate)!,
        HKObjectType.quantityTypeForIdentifier(HKQuantityTypeIdentifierDistanceWalkingRunning)!
    ]

    let healthDataItemsToWrite: Set<HKSampleType> = [
        HKObjectType.quantityTypeForIdentifier(HKQuantityTypeIdentifierBodyMass)!,
        HKObjectType.workoutType(),
        HKObjectType.quantityTypeForIdentifier(HKQuantityTypeIdentifierHeartRate)!,
        HKObjectType.quantityTypeForIdentifier(HKQuantityTypeIdentifierDistanceWalkingRunning)!
    ]

    // MARK: Initialization

    override init(identifier: String) {
        super.init(identifier: identifier)

        title = NSLocalizedString("Health Data", comment: "")
        text = NSLocalizedString("On the next screen, you will be prompted to grant access to read and write some of your general and health information, such as height, weight, and steps taken so you don't have to enter it again.", comment: "")
    }

    required init(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }

    // MARK: Convenience

    func getHealthAuthorization(completion: (success: Bool, error: NSError?) -> Void) {
        guard HKHealthStore.isHealthDataAvailable() else {
            let error = NSError(domain: "com.example.apple-samplecode.ORKSample", code: 2, userInfo: [NSLocalizedDescriptionKey: "Health data is not available on this device."])

            completion(success: false, error:error)

            return
        }

        // Get authorization to access the data
        HKHealthStore().requestAuthorizationToShareTypes(healthDataItemsToWrite, readTypes: healthDataItemsToRead) { (success, error) -> Void in
            completion(success:success, error:error)
        }
    }
}

Для реализации шага я использую этот код, очень простой:

public var TimedWalkTask: ORKOrderedTask {
    return ORKOrderedTask.fitnessCheckTaskWithIdentifier("WalkTask",intendedUseDescription: nil,walkDuration: 15 as NSTimeInterval, restDuration: 15 as NSTimeInterval,options: .None)
}

Просто интересно, если кто-нибудь знает, если я что-то упустил. Кажется, что программа работает правильно и возвращает результаты, но результаты не содержат те данные о состоянии, которые я ищу.

Просто для вашей информации, я приложил снимок экрана с разрешениями для моего приложения в настройках iphone:

1 ответ

Юань прав: сэмплы не синхронизируются с телефоном из Apple Watch в режиме реального времени, поэтому вы не сможете забрать их в своей активной задаче. Вы все еще могли бы сделать это в своем исследовании, но вам нужно будет использовать исторический запрос HealthKit, чтобы получить образцы, относящиеся к предыдущим задачам, и связать их позже при обработке данных.

Кроме того, если на Apple Watch не активен сеанс тренировки, образцы частоты пульса будут собираться нечасто. Если вы хотите использовать более частые образцы сердечного ритма, вам понадобится приложение Watch, которое запускает сеанс тренировки в рамках вашего исследования, или вам нужно будет попросить пользователей запустить тренировку с приложением Workout на Watch на время задание.

Другие вопросы по тегам