我如何使用 CYCHealthKitHandler 将我的活动定义为“室内骑行”

Posted

技术标签:

【中文标题】我如何使用 CYCHealthKitHandler 将我的活动定义为“室内骑行”【英文标题】:How I define my activity as "Indoor Cycling" using CYCHealthKitHandler 【发布时间】:2019-06-10 21:54:43 【问题描述】:

问题是我正在从我的应用程序向 Apple Health 发送“骑行”活动,我希望它显示为“室内骑行”,但发送到 Apple Health 活动的所有活动都标记为“户外活动”,有有什么属性可以从我的代码中将它们定义为“室内自行车”活动?

我进行了研究,但只有一个活动可以定义自行车,正如您所见,我使用了下面的代码: FitnessWithActivityType:HKWorkoutActivityTypeCycling

这是我的活动在 Apple Activity 应用中的外观视图

- (void)saveWorkoutFromStartDate:(NSDate *)startDate endDate:(NSDate *)endDate duration:(double)duration miles:(double)miles kilocalories:(double)calories completion:(void (^)(BOOL success, NSError *error))completion 

    HKQuantity *milesQuantity = [HKQuantity quantityWithUnit:[HKUnit mileUnit] doubleValue:miles];
    HKQuantity *caloriesQuantity = [HKQuantity quantityWithUnit:[HKUnit kilocalorieUnit] doubleValue:calories];

    HKWorkout *workout = [HKWorkout workoutWithActivityType:HKWorkoutActivityTypeCycling startDate:startDate endDate:endDate duration:duration totalEnergyBurned:caloriesQuantity totalDistance:milesQuantity metadata:nil];
    [self.healthStore saveObject:workout withCompletion:^(BOOL success, NSError *error) 

        if (success) 
            completion(success, nil);
        
        else 
            DLog(@"%@", error);
            completion(success, error);
        
    ];

【问题讨论】:

【参考方案1】:

在实例化您的锻炼时,尝试将值为 YES 的元数据室内锻炼键添加到元数据字典中:

HKWorkout *workout = [HKWorkout workoutWithActivityType:HKWorkoutActivityTypeCycling startDate:startDate endDate:endDate duration:duration totalEnergyBurned:caloriesQuantity totalDistance:milesQuantity metadata:@HKMetadataKeyIndoorWorkout : @(YES)];

https://developer.apple.com/documentation/healthkit/hkmetadatakeyindoorworkout?language=objc

【讨论】:

这在 ios 13 中似乎仍然适用;即使设置了 HKWorkoutConfiguration.locationType = .indoor。元数据密钥 HKMetadataKeyIndoorWorkout 非常需要。【参考方案2】:

这是在 HKWorkoutConfigurationlocationType 实例属性上设置的。

https://developer.apple.com/documentation/healthkit/hkworkoutconfiguration/1649491-locationtype?changes=_4&language=objc

【讨论】:

【参考方案3】:

使用HKMetadataKeyIndoorWorkout

HKMetadataKeyIndoorWorkout 为我工作,例如:

var isIndoorWorkout = true 
var metadata: Dictionary<String,Any> 
    var _metadata:Dictionary<String,Any> = [:]
    _metadata[HKMetadataKeySyncIdentifier] = "Your unique workout Identifier goes here"
    _metadata[HKMetadataKeySyncVersion] = yourDateCompletedAt.timeIntervalSince1970 // as an example for versioning
    _metadata[HKMetadataKeyIndoorWorkout] = isIndoorWorkout // <-- HERE!
    return _metadata

来源:HKMetadataKeyIndoorWorkout

【讨论】:

以上是关于我如何使用 CYCHealthKitHandler 将我的活动定义为“室内骑行”的主要内容,如果未能解决你的问题,请参考以下文章

我如何使用 codeanywhere 片段

如何使用我的 spotify api 令牌?

这是啥?我如何访问它?使用迅捷

如果加入条件,我该如何解决。如果使用字符串连接,我如何使用

如何使用我的应用委托

什么是 .NET,我如何知道我的项目是不是使用它?