Birleştirilmiş verileri okuma

Health Connect'te verileri toplama, temel toplamaları veya verileri gruplar halinde toplamayı içerir. Aşağıdaki iş akışlarında her ikisini de nasıl yapacağınız gösterilmektedir.

Temel toplama

Verilerinizde temel toplama işlevini kullanmak için HealthConnectClient nesnenizde aggregate işlevini kullanın. Parametreleri olarak metrik türlerini ve zaman aralığını eklediğiniz bir AggregateRequest nesnesini kabul eder. Temel toplamaların nasıl çağrıldığı, kullanılan metrik türlerine bağlıdır.

Kümülatif toplama

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

Aşağıdaki örnekte, bir veri türü için verilerin nasıl toplanacağı 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
    }
}

Veri kaynağına göre filtreleme

Toplu verileri kaynağına göre de filtreleyebilirsiniz. Örneğin, yalnızca belirli bir uygulama tarafından yazılan verileri ekleme.

Aşağıdaki örnekte, belirli bir uygulamadaki adımları toplamak için dataOriginFilter ve AggregateRequest nasıl kullanılacağı gösterilmektedir:

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

İstatistiksel toplama

İstatistiksel toplama, örnek içeren kayıtların minimum, maksimum veya ortalama değerlerini hesaplar.

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

Paketler

Health Connect, verileri gruplandırmanıza da olanak tanır. Kullanabileceğiniz iki tür grup vardır: süre ve dönem.

Çağrıldığında bir paket listesi döndürürler. Listenin seyrek olabileceğini unutmayın. Bu nedenle, herhangi bir veri içermeyen gruplar listeye dahil edilmez.

Süre

Bu durumda, toplanan veriler sabit bir süre içinde (ör. bir dakika veya bir saat) gruplara ayrılır. Verileri gruplandırmak için aggregateGroupByDuration kullanın. Parametre olarak metrik türlerini, zaman aralığını ve Duration eklediğiniz bir AggregateGroupByDurationRequest nesnesi kabul eder.

Aşağıda, adımların bir dakikalık gruplar halinde toplandığı 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, toplanan veriler haftalık veya aylık gibi tarihe dayalı bir süre içinde gruplara ayrılır. Verileri gruplandırmak için aggregateGroupByPeriod kullanın. Parametre olarak metrik türlerini, zaman aralığını ve Period eklediğiniz bir AggregateGroupByPeriodRequest nesnesi kabul eder.

Aşağıda, adımların aylık gruplar halinde toplandığı 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
    }
}

Okuma kısıtlamaları

Varsayılan olarak, tüm uygulamalar herhangi bir izin ilk kez verilmeden önceki 30 güne kadar olan Health Connect verilerini okuyabilir.

Okuma izinlerini varsayılan kısıtlamaların ötesine genişletmeniz gerekiyorsa PERMISSION_READ_HEALTH_DATA_HISTORY isteğinde bulunun. Aksi takdirde, bu izin olmadan 30 günden eski kayıtları okuma girişimi hatayla sonuçlanır.

Silinen bir uygulamanın izin geçmişi

Bir kullanıcı uygulamanızı silerse geçmiş izni de dahil olmak üzere tüm izinler iptal edilir. Kullanıcı uygulamanızı yeniden yükleyip tekrar izin verirse aynı varsayılan kısıtlamalar geçerli olur ve uygulamanız, Health Connect'teki verileri bu yeni tarihten önceki 30 gün boyunca okuyabilir.

Örneğin, kullanıcının uygulamanızı 10 Mayıs 2023'te sildiğini, 15 Mayıs 2023'te yeniden yüklediğini ve okuma izni verdiğini varsayalım. Uygulamanızın artık varsayılan olarak veri okuyabileceği en erken tarih 15 Nisan 2023'tür.

Kullanıcı tarafından seçilen uygulama önceliklerinden etkilenen toplu veriler

Son kullanıcılar, Health Connect ile entegre ettikleri Uyku ve Aktivite uygulamalarına öncelik verebilir. Bu öncelik listelerini yalnızca son kullanıcılar değiştirebilir. Toplu okuma işlemi gerçekleştirdiğinizde Aggregate API, yinelenen verileri hesaba katar ve yalnızca en yüksek önceliğe sahip uygulamadaki verileri saklar. Kullanıcı aynı anda aynı türde verileri (ör. atılan adım sayısı veya kat edilen mesafe) yazan birden fazla uygulamaya sahipse yinelenen veriler olabilir.

Son kullanıcıların uygulamalarına nasıl öncelik verebileceği hakkında bilgi edinmek için Health Connect verilerini yönetme başlıklı makaleyi inceleyin.

Kullanıcı, uygulamaları ekleyebilir veya kaldırabilir ve önceliklerini değiştirebilir. Kullanıcı, Health Connect ekranındaki veri toplamlarının en yüksek önceliği verdiği uygulamayla aynı olması için yinelenen veriler yazan bir uygulamayı kaldırmak isteyebilir. Veri toplamları gerçek zamanlı olarak güncellenir.

Aggregate API, Etkinlik ve Uyku uygulamalarının verilerini kullanıcının öncelikleri nasıl ayarladığına göre yinelenen verileri kaldırarak hesaplasa da bu verileri her uygulama için ayrı ayrı hesaplamak üzere kendi mantığınızı oluşturabilirsiniz.

Yalnızca Etkinlik ve Uyku veri türleri Health Connect tarafından yinelenen verilerden arındırılır ve gösterilen toplam veriler, Toplama API'si tarafından yinelenen verilerden arındırma işlemi gerçekleştirildikten sonraki değerlerdir. Bu toplamlar, adımlar ve mesafe verilerinin bulunduğu en son tam günü gösterir. Diğer uygulama türlerinde ise bu türdeki tüm uygulamaların toplam sayısı Health Connect'teki veri toplamlarında gösterilir.

Arka planda okuma

Uygulamanızın arka planda çalışmasını ve Health Connect'teki verileri okumasını isteyebilirsiniz. Background Read (Arka Planda Okuma) izni isterseniz kullanıcınız, uygulamanıza arka planda veri okuma erişimi verebilir.

Kayıt bazında desteklenen toplu veri türleri

Bu tabloda, Health Connect kaydına göre desteklenen tüm toplu veri türleri listelenir.

Kaydet Toplu veri türü
ActiveCaloriesBurned ACTIVE_CALORIES_TOTAL
BasalMetabolicRate BASAL_CALORIES_TOTAL
BloodPressure DIASTOLIC_AVG, DIASTOLIC_MAX, DIASTOLIC_MIN, SYSTOLIC_AVG, SYSTOLIC_MAX, SYSTOLIC_MIN
CyclingPedalingCadence RPM_AVG, RPM_MAX, RPM_MIN
Distance DISTANCE_TOTAL
ElevationGained ELEVATION_GAINED_TOTAL
ExerciseSession EXERCISE_DURATION_TOTAL
FloorsClimbed FLOORS_CLIMBED_TOTAL
HeartRate BPM_AVG, BPM_MAX, BPM_MIN, MEASUREMENTS_COUNT
Height HEIGHT_AVG, HEIGHT_MAX, HEIGHT_MIN
Hydration VOLUME_TOTAL
MindfulnessSession MINDFULNESS_DURATION_TOTAL
Nutrition BIOTIN_TOTAL, CAFFEINE_TOTAL, CALCIUM_TOTAL, CHLORIDE_TOTAL, CHOLESTEROL_TOTAL, CHROMIUM_TOTAL, COPPER_TOTAL, DIETARY_FIBER_TOTAL, ENERGY_FROM_FAT_TOTAL, ENERGY_TOTAL, FOLATE_TOTAL, FOLIC_ACID_TOTAL, IODINE_TOTAL, IRON_TOTAL, MAGNESIUM_TOTAL, MANGANESE_TOTAL, MOLYBDENUM_TOTAL, MONOUNSATURATED_FAT_TOTAL, NIACIN_TOTAL, PANTOTHENIC_ACID_TOTAL, PHOSPHORUS_TOTAL, POLYUNSATURATED_FAT_TOTAL, POTASSIUM_TOTAL, PROTEIN_TOTAL, RIBOFLAVIN_TOTAL, SATURATED_FAT_TOTAL, SELENIUM_TOTAL, SODIUM_TOTAL, SUGAR_TOTAL, THIAMIN_TOTAL, TOTAL_CARBOHYDRATE_TOTAL, TOTAL_FAT_TOTAL, TRANS_FAT_TOTAL, UNSATURATED_FAT_TOTAL, VITAMIN_A_TOTAL, VITAMIN_B12_TOTAL, VITAMIN_B6_TOTAL, VITAMIN_C_TOTAL, VITAMIN_D_TOTAL, VITAMIN_E_TOTAL, VITAMIN_K_TOTAL, ZINC_TOTAL
Power POWER_AVG, POWER_MAX, POWER_MIN
RestingHeartRate BPM_AVG, BPM_MAX, BPM_MIN
SkinTemperature TEMPERATURE_DELTA_AVG, TEMPERATURE_DELTA_MAX, TEMPERATURE_DELTA_MIN
SleepSession SLEEP_DURATION_TOTAL
Speed SPEED_AVG, SPEED_MAX, SPEED_MIN
Steps COUNT_TOTAL
StepsCadence RATE_AVG, RATE_MAX, RATE_MIN
TotalCaloriesBurned ENERGY_TOTAL
Weight WEIGHT_AVG, WEIGHT_MAX, WEIGHT_MIN
WheelchairPushes COUNT_TOTAL