Android Health Services锻炼准备失败及Exercise Type配置咨询
Android Health Services 锻炼准备失败与跨运动类型数据采集方案
Prepare exercise failed 常见触发原因
- 运动类型与待采集数据类型不匹配:Health Services 为每个
ExerciseType设置了数据采集白名单,若选中跑步类运动类型却强行配置游泳专属的划次、泳姿、SWOLF等数据类型,锻炼准备流程会直接抛出错误 - 相关权限未完整授予:未在Manifest中注册且动态申请前台服务权限、身体传感器权限、位置权限(采集GPS轨迹/配速场景需要),也会中断准备流程
- 设备硬件能力不支持:部分穿戴设备未搭载对应运动类型的采集算法或硬件模块,准备前调用
HealthServicesClient.getCapabilities()提前校验设备支持的运动类型、数据类型列表,可提前规避这类问题
是否存在支持全量Data Types的Exercise Type
不存在可兼容所有数据类型的通用Exercise Type。
Health Services的运动类型和传感器功耗策略、数据算法模型深度绑定:选择跑步类型时系统会自动调用步幅、跑姿识别相关算法,调整GPS采样率;选择游泳类型时系统会切换到防水场景下的动作识别逻辑,关闭不必要的GPS采样降低功耗,官方未开放覆盖全量数据类型的通用运动枚举值。
单次锻炼同时采集跑步、游泳数据的实现方式
- 若仅需采集两类运动的通用指标(心率、卡路里、活动时长、基础步数等),可选择
EXERCISE_TYPE_ACTIVITY_SESSION泛活动会话类型。该类型支持跨场景的通用活动数据采集,但无法获取跑步专属的触地时间、跑力值,也无法获取游泳专属的泳姿、划频等细分运动专有指标,配置时注意不要加入该类型不支持的专有数据类型,即可正常通过锻炼准备流程。 - 若需要同时获取两类运动的全量专有指标,无法在单个Exercise实例中同时运行两套运动类型的采集算法,可通过分段创建实例、会话层关联的方式实现:
- 业务层维护全局唯一的自定义锻炼会话ID
- 用户在跑步、游泳场景切换时,先结束当前运动类型的Exercise实例,绑定全局会话ID后持久化存储,再立刻创建对应新运动类型的Exercise实例,同样关联全局会话ID
- 数据统计、展示层根据全局会话ID,将同一次锻炼下多段不同运动类型的指标做合并处理,用户侧无感知即可拿到两类运动的全量数据
- 所有场景下,准备锻炼前都需要先通过能力查询接口过滤当前选中
ExerciseType不支持的DataType,不要强行传入不兼容的数据类型,可从根源避免Prepare exercise failed报错。
内容的提问来源于stack exchange,提问作者Desirée Rodríguez
相关产品推荐
相关产品推荐

