讀取原始資料

以下範例說明如何在常見工作流程中讀取原始資料。

簡易讀取

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 重新同步。

如要在此情況下讀取資料,您需要在 ReadRecordsRequestdataOriginFilter 參數中,將套件名稱指定為 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。