讀取匯總資料

Health Connect 支援不同的資料匯總方式,包括基本匯總或匯總資料 將資料轉換為值區下列工作流程會說明如何執行這兩項作業。

基本匯總

如要對資料使用基本匯總功能,請使用 aggregate 函式 在您的 HealthConnectClient 物件上。它接受 AggregateRequest 物件,用來新增指標類型 ,以及時間範圍做為參數基本匯總的呼叫方式取決於 所用的指標類型

累計匯總

累計匯總功能會計算總值。

以下範例顯示如何匯總特定類型的資料:

suspend fun aggregateDistance(
    healthConnectClient: HealthConnectClient,
    startTime: Instant,
    endTime: Instant
) {
    try {
        val response = healthConnectClient.aggregate(
            AggregateRequest(
                metrics = setOf(DistanceRecord.DISTANCE_TOTAL),
                timeRangeFilter = TimeRangeFilter.between(startTime, endTime)
            )
        )
        // The result may be null if no data is available in the time range
        val distanceTotalInMeters = response[DistanceRecord.DISTANCE_TOTAL]?.inMeters ?: 0L
    } catch (e: Exception) {
        // Run error handling here
    }
}

統計匯總

統計匯總功能會計算 範例記錄。

以下範例顯示如何使用統計匯總功能:

suspend fun aggregateHeartRate(
    healthConnectClient: HealthConnectClient,
    startTime: Instant,
    endTime: Instant
) {
    try {
        val response =
            healthConnectClient.aggregate(
                AggregateRequest(
                    setOf(HeartRateRecord.BPM_MAX, HeartRateRecord.BPM_MIN),
                    timeRangeFilter = TimeRangeFilter.between(startTime, endTime)
                )
            )
        // The result may be null if no data is available in the time range
        val minimumHeartRate = response[HeartRateRecord.BPM_MIN]
        val maximumHeartRate = response[HeartRateRecord.BPM_MAX]
    } catch (e: Exception) {
        // Run error handling here
    }
}

Bucket

Health Connect 也能讓您將資料匯總成「值區」。這兩種 您可以使用時間長度時段的值區。

呼叫這些值區之後,系統會傳回值區清單。請注意,這份清單的項目可以稀疏 如果值區中沒有任何資料,就不會列入清單。

時間長度

在此情況下,系統會將一段固定長度的 例如一分鐘或一小時如要將資料匯總為值區,請使用 aggregateGroupByDuration。它接受 AggregateGroupByDurationRequest 物件,其中加入 指標類型、時間範圍和 Duration 做為參數。

以下是將步數資料匯總成每分鐘值區的程式碼範例:

suspend fun aggregateStepsIntoMinutes(
    healthConnectClient: HealthConnectClient,
    startTime: LocalDateTime,
    endTime: LocalDateTime
) {
    try {
        val response =
            healthConnectClient.aggregateGroupByDuration(
                AggregateGroupByDurationRequest(
                    metrics = setOf(StepsRecord.COUNT_TOTAL),
                    timeRangeFilter = TimeRangeFilter.between(startTime, endTime),
                    timeRangeSlicer = Duration.ofMinutes(1L)
                )
            )
        for (durationResult in response) {
            // The result may be null if no data is available in the time range
            val totalSteps = durationResult.result[StepsRecord.COUNT_TOTAL]
        }
    } catch (e: Exception) {
        // Run error handling here
    }
}

句號

在此情況下,系統會將指定日期的匯總資料分割為多個值區 例如一週或一個月的時間如要將資料匯總為值區,請使用 aggregateGroupByPeriod。它接受 AggregateGroupByPeriodRequest 物件,其中加入 指標類型、時間範圍和 Period 做為參數。

以下是將各階段匯總至每月值區的程式碼範例:

suspend fun aggregateStepsIntoMonths(
    healthConnectClient: HealthConnectClient,
    startTime: LocalDateTime,
    endTime: LocalDateTime
) {
    try {
        val response =
            healthConnectClient.aggregateGroupByPeriod(
                AggregateGroupByPeriodRequest(
                    metrics = setOf(StepsRecord.COUNT_TOTAL),
                    timeRangeFilter = TimeRangeFilter.between(startTime, endTime),
                    timeRangeSlicer = Period.ofMonths(1)
                )
            )
        for (monthlyResult in response) {
            // The result may be null if no data is available in the time range
            val totalSteps = monthlyResult.result[StepsRecord.COUNT_TOTAL]
        }
    } 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 日