집계 데이터 읽기

헬스 커넥트에서 데이터를 집계하는 작업에는 기본 집계 또는 버킷으로 데이터를 집계하는 작업이 포함됩니다. 다음 워크플로는 이 두 가지 작업을 실행하는 방법을 보여줍니다.

기본 집계

데이터에 기본 집계를 사용하려면 HealthConnectClient 객체에서 aggregate 함수를 사용하세요. 이는 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
    }
}

버킷

헬스 커넥트를 사용하면 데이터를 버킷으로 집계할 수도 있습니다. 사용할 수 있는 버킷에는 시간기간이라는 두 가지 유형이 있습니다.

호출하면 버킷 목록이 반환됩니다. 목록은 희소할 수 있으므로 버킷에 데이터가 포함되어 있지 않으면 목록에 포함되지 않습니다.

시간

이 경우 집계된 데이터는 고정된 시간(예: 1분 또는 1시간) 내에 버킷으로 분할됩니다. 데이터를 버킷으로 집계하려면 aggregateGroupByDuration을 사용하세요. 이는 AggregateGroupByDurationRequest 객체를 허용하며 여기서 측정항목 유형, 기간, Duration을 매개변수로 추가합니다.

다음은 걸음 수를 1분 길이의 버킷으로 집계하는 예를 보여줍니다.

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
    }
}

기간

이 경우 집계된 데이터는 날짜 기반 기간(예: 1주 또는 1개월) 내에 버킷으로 분할됩니다. 데이터를 버킷으로 집계하려면 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일 읽기 제한

애플리케이션은 권한이 처음 부여되기 최대 30일 전부터의 헬스 커넥트 데이터를 읽을 수 있습니다.

그러나 사용자가 앱을 삭제하면 권한 기록이 사라집니다. 사용자가 앱을 재설치하고 권한을 다시 부여하면 앱은 새로운 날짜로부터 최대 30일 전부터의 헬스 커넥트의 데이터를 읽을 수 있습니다.

사용자가 2023년 3월 30일에 처음 애플리케이션에 읽기 권한을 부여한 경우 앱이 데이터를 읽어올 수 있는 가장 빠른 날짜는 2023년 2월 28일부터입니다.

그리고 사용자가 2023년 5월 10일에 앱을 삭제합니다. 사용자는 2023년 5월 15일에 다시 앱을 설치하고 읽기 권한을 부여합니다. 이제 앱에서 데이터를 읽을 수 있는 가장 빠른 날짜는 2023년 4월 15일입니다.