합산 데이터

헬스 커넥트에서 데이터를 합산하면 기본 합산을 포함하거나 버킷으로 합산 데이터를 포함할 수 있습니다. 다음 워크플로는 이 두 가지 작업을 실행하는 방법을 보여줍니다.

기본 합산: 누적

다음 예에서는 데이터 유형에 맞는 데이터를 합산하는 방법을 보여줍니다.

suspend fun aggregateDistance(client: HealthConnectClient): Double? {
    val request = AggregateRequest(
        metrics = setOf(Distance.DISTANCE_TOTAL),
        timeRangeFilter = TimeRangeFilter.between(START_TIME, END_TIME)
    )
    val response = client.aggregate(request)
    // The result may be null if no data is available to aggregate.
    return response.getMetric(Distance.DISTANCE_TOTAL)
}

기본 합산: 통계

통계 합산은 최솟값, 최댓값 또는 평균값을 계산합니다.

다음은 통계 합산의 예입니다.

suspend fun aggregateHROverTime(client: HealthConnectClient): Long? {
    val aggregate = client.aggregate(
        AggregateRequest(
            setOf(HeartRateSeries.BPM_MAX),
            timeRangeFilter = TimeRangeFilter.between(START_TIME, END_TIME),
            dataOriginFilter = listOf(
                DataOrigin("androidx.health.connect.client.sample")
            )
        )
    )
    // The result may be null if no data is available to aggregate.
    return aggregate.getMetric(HeartRateSeries.BPM_MAX)
}

버킷

헬스 커넥트를 사용하면 버킷으로 합산할 수 있습니다. 사용할 수 있는 버킷에는 두 가지 유형이 있습니다.

  • 기간 - 각 버킷이 고정된 시간으로 구성됩니다(예: 1분 또는 1시간).
  • 주기 - 각 버킷이 개념적인 시간으로 구성됩니다(예: 1주 또는 1개월).

헬스 커넥트는 버킷 목록을 반환합니다. 이 목록은 희소하므로 버킷에 데이터가 포함되지 않으면 목록에 나타나지 않습니다.

다음은 걸음 수를 월간 버킷으로 합산하는 예입니다.

suspend fun aggregateIntoMonths(healthConnectClient: HealthConnectClient) {
    val aggregateGroupByPeriodRequest = AggregateGroupByPeriodRequest(
        metrics = setOf(Steps.TOTAL),
        timeRangeFilter = TimeRangeFilter.between(START_TIME, END_TIME),
        timeRangeSlicer = Period.ofMonths(1)
    )
    val response = healthConnectClient.aggregateGroupByPeriod(
        aggregateGroupByPeriodRequest
    )
    response.forEach { period ->
        val totalSteps = period.result.getMetric(Steps.TOTAL) ?: 0L
    }
}

Duration을 기준으로 합산하는 경우 이 접근 방식은 이전과 동일한 패턴을 따르지만 대신 aggregateGroupByDuration(request: AggregateGroupByDurationRequest) 메서드를 사용합니다.