以下範例說明如何在常見工作流程中讀取原始資料。
簡易讀取
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。