以下示例演示了如何在常见工作流程中读取原始数据。
简单读取
Health Connect 中的“步数”数据类型捕获用户在读数之间所走的步数。步数代表健康、健身和健康平台上的常见测量值。Health Connect 使读取和写入步数数据变得简单。
要读取记录,请创建一个 ReadRecordsRequest
,并在调用 readRecords
时提供它。
以下示例演示了如何在特定时间内读取用户的步数数据。有关使用 SensorManager
的扩展示例,请参阅 步数 数据指南。
suspend fun readStepsByTimeRange(
healthConnectClient: HealthConnectClient,
startTime: Instant,
endTime: Instant
) {
try {
val response = healthConnectClient.readRecords(
ReadRecordsRequest(
StepsRecord::class,
timeRangeFilter = TimeRangeFilter.between(startTime, endTime)
)
)
for (stepRecord in response.records) {
// Process each step record
}
} catch (e: Exception) {
// Run error handling here
}
}
读取之前写入的数据
如果应用之前已将记录写入 Health Connect,则该应用可以读取回这些记录,而无需对这些特定记录具有读取权限。这适用于应用需要在用户重新安装后与 Health Connect 同步的场景。
要在这种情况下读取数据,您需要在 DataOrigin
对象中指示包名称,作为 dataOriginFilter
参数中的 ReadRecordsRequest
。
以下示例演示了在读取“步数”记录时如何指示包名称
try {
val response = healthConnectClient.readRecords(
ReadRecordsRequest(
recordType = StepsRecord::class,
timeRangeFilter = TimeRangeFilter.between(startTime, endTime),
dataOriginFilter = setOf(DataOrigin("com.my.package.name"))
)
)
for (record in response.records) {
// Process each record
}
} catch (e: Exception) {
// Run error handling here
}
30 天读取限制
Health Connect 可以读取最早可追溯到首次授予任何权限之前 30 天的数据。
但是,如果用户删除了您的应用,则权限历史记录将丢失。如果用户重新安装您的应用并再次授予权限,则您的应用可以读取 Health Connect 中最早可追溯到该新日期之前 30 天的数据。
示例
如果用户于 2023 年 3 月 30 日首次向您的应用授予读取权限,则您的应用可以读取回的最早数据为 **2023 年 2 月 28 日** 及以后。
然后,用户于 2023 年 5 月 10 日删除了您的应用。用户决定于 2023 年 5 月 15 日重新安装它并授予读取权限。您的应用现在可以读取的最早数据为 **2023 年 4 月 15 日**。
前台限制
使用 Health Connect 读取数据仅限于在前台运行的应用。此限制旨在进一步加强用户隐私。这向用户保证,Health Connect 不会后台读取其数据,并且数据仅在前台读取和访问。
对于可以容忍中断的情况(例如,在您的应用中显示读数),请直接从 Health Connect 读取到您的客户端应用。
对于您希望避免任何中断的情况,例如从 Health Connect 读取一系列数据,然后将其写入并上传到其他位置,请使用ForegroundService
,而不是 Activity,因为 Activity 可以被快速关闭。