如何通过Google Fit REST API按ActivityType聚合每日各运动距离数据?
按运动类型过滤并按天聚合Google Fit距离数据
太懂这种和Google Fit REST API死磕的感觉了——Android SDK确实把很多细节封装好了,REST这边就得自己抠参数。你已经搞定按天聚合步数,现在要拆分骑行、跑步这类特定运动的每日距离,其实核心是利用ActivityType过滤来精准抓取对应运动的距离数据,下面给你具体的实现方案:
方案1:单次请求聚合多种运动类型的每日距离
你可以在aggregateBy数组中为每种运动类型单独配置条目,这样一次请求就能拿到骑行、跑步等多种类型的每日距离统计。请求体示例如下:
{ "aggregateBy": [ { "dataTypeName": "com.google.distance.delta", "activityType": 1 // 对应骑行(CYCLING) }, { "dataTypeName": "com.google.distance.delta", "activityType": 7 // 对应跑步(RUNNING) } ], "bucketByTime": { "durationMillis": 86400000 // 按天分桶 }, "startTimeMillis": YOUR_START_TIMESTAMP, "endTimeMillis": YOUR_END_TIMESTAMP }
返回结果中,每个时间桶(天)会分别包含骑行和跑步的距离数据,你可以通过dataset.dataSourceId或者aggregateByIndex来区分不同运动类型的统计值。
方案2:针对单个运动类型单独请求
如果需要更灵活的控制(比如只统计跑步),可以针对单个运动类型发送请求,请求体示例:
{ "aggregateBy": [ { "dataTypeName": "com.google.distance.delta", "activityType": 7, // 仅统计跑步 "dataSourceId": "derived:com.google.distance.delta:com.google.android.gms:merge_distance_delta" // 指定精准数据源,避免遗漏数据 } ], "bucketByTime": { "durationMillis": 86400000 }, "startTimeMillis": YOUR_START_TIMESTAMP, "endTimeMillis": YOUR_END_TIMESTAMP }
关键参数说明
- ActivityType枚举值:常用运动类型的对应数值如下:
- 1: 骑行(CYCLING)
- 7: 跑步(RUNNING)
- 3: 步行(WALKING)
- 10: 游泳(SWIMMING)
- 数据源ID:指定
derived:com.google.distance.delta:com.google.android.gms:merge_distance_delta可以确保获取所有合并后的距离数据,避免因为数据源分散导致统计不全。
注意事项
- 只有当距离数据是和明确的运动记录关联时,才能通过
activityType过滤。如果是设备自动估计的通用距离(没有绑定运动类型),这部分数据会被过滤掉。 - 确保你的OAuth权限包含
https://www.googleapis.com/auth/fitness.activity.read和https://www.googleapis.com/auth/fitness.location.read,否则会有权限错误。
内容的提问来源于stack exchange,提问作者Andrew McOlash
相关产品推荐
相关产品推荐

