Senthilkumar
Senthilkumar

Reputation: 2481

How to read HKWorkoutActivityType.Running in healthkit?

I tried below code to read data from healthapp, But I'm getting results as nil value and also error Invalid HKObjectType HKQuantityTypeIdentifierDistanceWalkingRunning for keyPath workoutType.

mac version : 10.10.5 xcode version : 7.1

let distanceType =
        HKObjectType.quantityTypeForIdentifier(
            HKQuantityTypeIdentifierDistanceWalkingRunning)

        let workoutPredicate = HKQuery.predicateForWorkoutsWithWorkoutActivityType(HKWorkoutActivityType.Running)

        let startDateSort =
        NSSortDescriptor(key: HKSampleSortIdentifierStartDate, ascending: true)

        let query = HKSampleQuery(sampleType: distanceType!, predicate: workoutPredicate,
            limit: 0, sortDescriptors: [startDateSort]) {
                (sampleQuery, results, error) -> Void in

                if let distanceSamples = results as? [HKQuantitySample] {

                    // process the detailed samples...

                }
                else {
                    // Perform proper error handling here...
                    print("*** An error occurred while adding a sample to " +
                        "the workout: \(error!.localizedDescription)")

                    abort()
                }
        }

               // Execute the query
        healthManager.healthKitStore.executeQuery(query)

below code to access healthkit data

// 1. Set the types you want to read from HK Store
        let typeOfRead = [HKObjectType.quantityTypeForIdentifier(HKQuantityTypeIdentifierDietaryEnergyConsumed)!,
            HKObjectType.quantityTypeForIdentifier(HKQuantityTypeIdentifierActiveEnergyBurned)!,
            HKObjectType.quantityTypeForIdentifier(HKQuantityTypeIdentifierHeight)!,
            HKObjectType.quantityTypeForIdentifier(HKQuantityTypeIdentifierBodyMass)!,
            HKObjectType.characteristicTypeForIdentifier(HKCharacteristicTypeIdentifierDateOfBirth)!,
            HKObjectType.characteristicTypeForIdentifier(HKCharacteristicTypeIdentifierBiologicalSex)!,
            HKObjectType.characteristicTypeForIdentifier(HKCharacteristicTypeIdentifierBloodType)!,
            HKObjectType.quantityTypeForIdentifier(HKQuantityTypeIdentifierStepCount)!,
            HKObjectType.quantityTypeForIdentifier(HKQuantityTypeIdentifierDistanceWalkingRunning)!,
            HKObjectType.quantityTypeForIdentifier(HKQuantityTypeIdentifierHeartRate)!,
            HKObjectType.quantityTypeForIdentifier(HKQuantityTypeIdentifierOxygenSaturation)!,
            HKObjectType.quantityTypeForIdentifier(HKQuantityTypeIdentifierBloodPressureDiastolic)!,
            HKObjectType.quantityTypeForIdentifier(HKQuantityTypeIdentifierBloodPressureSystolic)!]

        let typeOfReads = NSSet(array: typeOfRead)

        // 2. Set the types you want to write to HK Store

        let typeOfWrite = [

            HKObjectType.quantityTypeForIdentifier(HKQuantityTypeIdentifierDietaryEnergyConsumed)!,
            HKObjectType.quantityTypeForIdentifier(HKQuantityTypeIdentifierActiveEnergyBurned)!,
            HKObjectType.quantityTypeForIdentifier(HKQuantityTypeIdentifierHeight)!,
            HKObjectType.quantityTypeForIdentifier(HKQuantityTypeIdentifierBodyMass)!,
            HKObjectType.quantityTypeForIdentifier(HKQuantityTypeIdentifierStepCount)!,
            HKObjectType.quantityTypeForIdentifier(HKQuantityTypeIdentifierDistanceWalkingRunning)!

        ]

        let typeOfWrites = NSSet(array: typeOfWrite)

Upvotes: 3

Views: 976

Answers (1)

Gerd Castan
Gerd Castan

Reputation: 6849

use this:

let query = HKSampleQuery(sampleType: HKWorkoutType.workoutType(), predicate: workoutPredicate,
        limit: 0, sortDescriptors: [startDateSort]) {
    // ...
}

with the sampleType you say that you want to select workouts. the predicate determines what workout properties are used to select.

You told the healthSore to select running samples with workout properties. That doesn't fit together.

Upvotes: 2

Related Questions