如何通过Health Connect获取Google Fit的条目步数?
通过Health Connect获取按活动条目拆分的步数数据
可以通过Health Connect获取对应Google Fit中"活动条目"的步数,核心是利用**会话(SessionRecord)**关联步数记录(StepsRecord)来实现,而非仅读取聚合的总步数。以下是具体实现思路和步骤:
核心逻辑说明
Google Fit中的"活动条目"对应Health Connect里的SessionRecord,每个会话代表一次独立的活动(比如步行、跑步、健身等)。你需要先查询会话列表,再针对每个会话的时间范围查询对应的步数记录,累加后得到该条目的总步数。
具体实现步骤
- 申请权限:在AndroidManifest.xml中声明并动态申请以下权限:
<uses-permission android:name="android.permission.health.READ_STEPS" /> <uses-permission android:name="android.permission.health.READ_SESSIONS" /> - 查询会话列表:获取指定时间范围内的所有活动会话,这些会话就是你要的"条目"
- 关联步数记录:对每个会话,根据其开始/结束时间查询该时间段内的
StepsRecord,累加步数得到该条目的总步数
代码示例(Kotlin)
import androidx.health.connect.client.HealthConnectClient import androidx.health.connect.client.request.ReadRecordsRequest import androidx.health.connect.client.time.TimeRangeFilter import androidx.health.connect.client.records.SessionRecord import androidx.health.connect.client.records.StepsRecord import kotlinx.coroutines.runBlocking fun getSessionSteps(context: Context, startTime: Long, endTime: Long) { val healthConnectClient = HealthConnectClient.getOrCreate(context) // 1. 查询指定时间范围内的所有会话 val sessionRequest = ReadRecordsRequest( recordType = SessionRecord::class, timeRangeFilter = TimeRangeFilter.between(startTime, endTime) ) runBlocking { val sessionResult = healthConnectClient.readRecords(sessionRequest) val sessions = sessionResult.records // 2. 遍历每个会话,查询对应步数 for (session in sessions) { val stepsRequest = ReadRecordsRequest( recordType = StepsRecord::class, timeRangeFilter = TimeRangeFilter.between(session.startTime, session.endTime) ) val stepsResult = healthConnectClient.readRecords(stepsRequest) val totalSteps = stepsResult.records.sumOf { it.count } // 处理会话条目对应的步数,比如存入本地或展示 // 示例:println("活动条目:${session.name ?: "未知活动"},步数:$totalSteps") } } }
注意事项
- 确保用户已授予对应的Health Connect权限,否则会抛出权限异常
- 部分第三方应用同步的步数可能未关联会话,这类数据无法按条目拆分,只能通过聚合查询获取总步数
- 时间范围查询要精准,避免不同会话的步数被重复计算
内容的提问来源于stack exchange,提问作者内田真菜
相关产品推荐
相关产品推荐

