读取原始数据

以下示例演示了如何在常见工作流程中读取原始数据。

简单读取

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 可以被快速关闭。