iOS中HealthKit能否识别步数是设备采集还是手动录入?
HealthKit判断步数来源的实现方式
结论:可以准确区分步数是否为用户手动输入,也能进一步筛选出iPhone内置传感器自动检测生成的步数。
具体判断逻辑如下:
- 区分手动录入数据
所有HealthKit存储的健康样本都自带官方的元数据标识。查询步数类型(对应标识符HKQuantityTypeIdentifierStepCount)的HKQuantitySample样本后,直接读取样本metadata字典中HKMetadataKeyWasUserEntered键的布尔值即可:- 值为
true时,该条步数为用户手动在健康App中添加录入 - 值为
false或该键不存在时,该条数据为设备/应用自动生成,不属于手动输入
- 值为
- 筛选iPhone内置传感器检测的步数
排除手动录入的数据后,剩余的自动生成步数可能来自Apple Watch、第三方智能穿戴设备、第三方健康App同步,要精准定位到iPhone自身传感器生成的数据,需要额外校验样本的sourceRevision属性:
当样本的sourceRevision.source.bundleIdentifier为系统内置健康应用的标识com.apple.health,且不满足手动录入的判定条件时,该条数据就是iPhone内置运动传感器在用户实际行走过程中检测生成的步数。
注意不要通过来源的显示名称做判断:不同系统语言下来源的显示文案有差异,用户也可以自定义设备名称,通过元数据键和bundle ID判断是官方提供的稳定方案,不受系统语言、用户自定义设置影响,和iOS「健康」App内的来源标记逻辑完全一致。
内容的提问来源于stack exchange,提问作者Pytan
相关产品推荐
相关产品推荐

