以下示例展示了如何在常见工作流中读取原始数据。
简易读取
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 重新同步。
如需在此场景中读取数据,您需要在 ReadRecordsRequest
的 dataOriginFilter
参数中,将软件包名称指示为 DataOrigin
对象。
以下示例展示了如何在读取步数记录时指示软件包名称:
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 天的数据。
不过,如果用户删除您的应用,权限历史记录将会丢失。如果用户重新安装您的应用并再次授予权限,则您的应用可以读取从该新日期最多回推 30 天的 Health Connect 数据。
示例
假设某用户在 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。