ios HKSampleQuery不返回HKSeriesType.workoutRoute的结果

suzh9iv8  于 2023-05-19  发布在  iOS
关注(0)|答案(1)|浏览(97)

我面临的问题是,我试图从跑步锻炼中获得潜在的GPS点,但没有找到锻炼。
下面的第一个函数fetchRunningWorkouts完成得很好,它是在fetchRunningWorkoutRoute失败而没有找到数据时完成的。我可以看到设备上有可用的运行,我可以看到我有所需查询的适当授权。
注意:为了清楚起见,我调用KHealthStore().execute()

func fetchRunningWorkouts() {
        // Create a predicate to filter for running workouts
        let workoutPredicate = HKQuery.predicateForWorkouts(with: .running)

        // Create a query to fetch running workouts
        let workoutQuery = HKSampleQuery(
            sampleType: HKWorkoutType.workoutType(),
            predicate: workoutPredicate,
            limit: 8,
            sortDescriptors: nil
        ) { (query, samples, error) in
             
             fetchRunningWorkoutRoute(workout: workout)
             ....
     }
func fetchRunningWorkoutRoute(workout: HKWorkout) {

    let workoutRouteQuery = HKSampleQuery(
        sampleType: HKSeriesType.workoutRoute(),
        predicate: HKQuery.predicateForObjects(from: workout),
        limit: HKObjectQueryNoLimit,
        sortDescriptors: nil
    ) { (query, samplesOrNil, errorOrNil) in
          guard errorOrNil == nil else {
              print("HealthKit query error: \(errorOrNil!.localizedDescription)")
              return
          }

        guard let samples = samplesOrNil as? [HKWorkoutRoute], let route = samples.first else {
            print("No workout route found in HealthKit.")
            return
        }
           ....
        }
cygmwpex

cygmwpex1#

万一有人发现这个我想出来了。这是更新的功能。
func getLastWorkouts(){ let workoutType = HKSampleType.workoutType()

let workoutQuery = HKSampleQuery(
    sampleType: workoutType,
    predicate: nil,
    limit: 10,
    sortDescriptors: [NSSortDescriptor(key: HKSampleSortIdentifierStartDate, ascending: false)]
) { (query, samples, error) in
    if let error = error {
        print("HealthKit query error: \(error.localizedDescription)")
        return
    }

    guard let workouts = samples as? [HKWorkout] else {
        print("No workouts found in HealthKit.")
        return
    }
    let quantityType = HKQuantityType.quantityType(forIdentifier: .distanceWalkingRunning)!

    for workout in workouts {
        if workout.workoutActivityType == .running {
            if #available(iOS 16.0, *) {
                for (quantityType, statistics) in workout.allStatistics {
                    print("Quantity Type: \(quantityType)")
                    print("Statistics: \(statistics)")
                    self.fetchRunningWorkoutRoute(workout: workout)
                }
            } else {
                // Fallback on earlier versions
            }
        }
    }
}

healthStore.execute(workoutQuery)

}

相关问题