Birleştirilmiş verileri okuma

Health Connect'te veri toplama, temel toplama veya birleştirme işlemlerini içerir. gruplara ayırmanızı sağlar. Aşağıdaki iş akışlarında her ikisinin de nasıl yapılacağı gösterilmektedir.

Temel toplama

Verilerinizde temel toplamadan yararlanmak için aggregate işlevini kullanın HealthConnectClient nesnenizde. Kabul edilen bir Metrik türlerini eklediğiniz AggregateRequest nesnesi ve zaman aralığı parametreleridir. Temel toplamaların nasıl adlandırıldığı ve kullanılan metrik türlerine bakalım.

Kümülatif toplama

Kümülatif toplama, toplam değeri hesaplar.

Aşağıdaki örnekte bir veri türüne ilişkin verilerin nasıl birleştirileceği gösterilmektedir:

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

İstatistiksel toplama

İstatistiksel toplama, bir feed'in minimum, maksimum veya ortalama kayıt örneğidir.

Aşağıdaki örnekte istatistiksel toplamanın nasıl kullanılacağı gösterilmektedir:

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

Kovalar

Health Connect, verileri paketler halinde birleştirmenize de olanak tanıyabilir. İki tür süre ve dönem bilgilerini dahil edebilirsiniz.

Çağrı, ardından bir paket listesi döndürür. Liste seyrek olabileceğinden, veri içermiyorsa listeye dahil edilmez.

Süre

Bu durumda, birleştirilmiş veriler sabit bir süre içinde gruplara bölünür. anlamına gelir. Verileri paketler halinde birleştirmek için aggregateGroupByDuration. Kabul edilen bir AggregateGroupByDurationRequest nesnesi metrik türlerini, zaman aralığını ve Duration parametrelerini seçebilirsiniz.

Aşağıda, adımların bir dakika uzunluğunda paketlerde toplanmasına ilişkin bir örnek gösterilmektedir:

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

Nokta

Bu durumda, birleştirilmiş veriler tarih tabanlı bir tutar çerçevesinde gruplara ayrılır. (ör. hafta veya ay). Verileri paketler halinde birleştirmek için aggregateGroupByPeriod. Kabul edilen bir AggregateGroupByPeriodRequest nesnesi metrik türlerini, zaman aralığını ve Period parametrelerini seçebilirsiniz.

Aşağıda, adımların aylık paketlerde toplanmasıyla ilgili bir örnek gösterilmektedir:

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 günlük okuma kısıtlaması

Uygulamalar, Health Connect'teki verileri şu tarihten önceki 30 gün boyunca okuyabilir: herhangi bir izin verildi.

Ancak, bir kullanıcı uygulamanızı silerse izin geçmişi kaybolur. Kullanıcı uygulamanızı yeniden yüklediğinde ve tekrar izin verdiğinde, uygulamanız Bu yeni tarihten 30 gün öncesine kadar Health Connect.

Örnek

Bir kullanıcı ilk olarak 30 Mart 2023'te uygulamanıza okuma izni verdiyse Uygulamanızın geri okuyabileceği en erken veriler 28 Şubat 2023 tarihli olacaktır devam edebilir.

Kullanıcı, daha sonra 10 Mayıs 2023'te uygulamanızı siler. Kullanıcı, yükleme işlemini okuma izni vermeniz gerekir. Uygulamanızın şu an için en erken tarihi 15 Nisan 2023 tarihli veriler okunmuştur.