watchOS 5:HKLiveWorkoutBuilder、HKWorkoutRouteBuilder 和锻炼距离

watchOS 5: HKLiveWorkoutBuilder, HKWorkoutRouteBuilder and Workout Distance

我正在使用 HKLiveWorkoutBuilderHKWorkoutRouteBuilder 在 Apple Watch 上跟踪锻炼。

调用时:

[workoutBuilder finishWorkoutWithCompletion:^(HKWorkout * _Nullable workout, NSError * _Nullable error) {

}];

返回的workout对象不包含用户走过的距离:

(lldb) po workout.totalDistance
nil

但是路线保存正确。

鉴于.totalDistance是只读的,我应该如何在watchOS 5中设置锻炼的距离?

这里的答案分为两部分。

要使其适用于 步行或 运行,您可以使用以下代码:

workoutBuilder?.beginCollection(withStart: Date(), completion: { (success, error) in
    guard success == true else {
        #warning ("deal with failure")
        return
    }

    workoutBuilder?.dataSource = HKLiveWorkoutDataSource(healthStore:self.healthStore, workoutConfiguration: self.workoutConfig)

    //  this is the important bit 
    workoutBuilder?.dataSource?.enableCollection(for: HKQuantityType.quantityType(forIdentifier: .distanceWalkingRunning)!, predicate: nil)

    workoutBuilder?.dataSource?.enableCollection(for: HKQuantityType.quantityType(forIdentifier: .heartRate)!, predicate: nil)
    workoutBuilder?.dataSource?.enableCollection(for: HKQuantityType.quantityType(forIdentifier: .activeEnergyBurned)!, predicate: nil)

})

您可以将其用于游泳和滑雪。

目前无法使用 workout builder 获取其他类型户外运动的距离 activity,例如划船。

--

Radar/Feedback 是否要复制和粘贴的详细信息

反馈编号: FB5714600

标题:支持更多运动类型的距离追踪

Body:

目前 live workout builder 仅包括对以下类型的跟踪距离的支持: - 步行或 运行 距离 - 滑雪 - 游泳

我看到两个选项。最好是允许这样的事情:

workoutBuilder?.dataSource?.enableCollection(for: HKQuantityType.quantityType(forIdentifier: .distancePaddling)!, predicate: nil)

另一种选择是允许锻炼可变,以便可以追溯添加距离。

如果需要,我很乐意提供进一步的意见。我们的用户喜欢 Apple Watch,但令他们感到沮丧的是,他们无法在“健康”中存储划桨锻炼的距离。