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 toplamları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] ?: 0L
        val maximumHeartRate = response[HeartRateRecord.BPM_MAX] ?: 0L
    } 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 grup liste 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. TimeRangeFilter içinde startTime ve endTime için Instant veya LocalDateTime nesnelerini çiftler halinde kullanabilirsiniz.

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] ?: 0L
        }
    } 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] ?: 0L
        }
    } 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 varsayılan olarak veri okuyabileceği en erken tarih 15 Nisan 2023'tür.

Kullanıcı tarafından seçilen uygulama önceliklerinden etkilenen verileri toplama

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.

Uygulama önceliklerini yeniden sıralama işlemini gösteren şekil
Şekil 1: Uygulama önceliklerini yeniden sıralama

Uygulama önceliklerini yeniden sıralamayı gösteren şekil

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ı ekleyip 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 verileri tekilleştirerek hesaplasa da bu verileri yazan 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 veri türlerinde, toplu sonuçlar verileri yazan tüm uygulamalardan Health Connect'teki tüm veri türlerini birleştirir.

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.

Tablo: Kayda göre desteklenen toplu veri türleri
Kaydet Toplu veri türü
ActiveCaloriesBurnedRecord ACTIVE_CALORIES_TOTAL
ActivityIntensityRecord DURATION_TOTAL, INTENSITY_MINUTES_TOTAL, MODERATE_DURATION_TOTAL, VIGOROUS_DURATION_TOTAL
BasalMetabolicRateRecord BASAL_CALORIES_TOTAL
BloodPressureRecord DIASTOLIC_AVG, DIASTOLIC_MAX, DIASTOLIC_MIN, SYSTOLIC_AVG, SYSTOLIC_MAX, SYSTOLIC_MIN
CyclingPedalingCadenceRecord RPM_AVG, RPM_MAX, RPM_MIN
DistanceRecord DISTANCE_TOTAL
ElevationGainedRecord ELEVATION_GAINED_TOTAL
ExerciseSessionRecord EXERCISE_DURATION_TOTAL
FloorsClimbedRecord FLOORS_CLIMBED_TOTAL
HeartRateRecord BPM_AVG, BPM_MAX, BPM_MIN, MEASUREMENTS_COUNT
HeightRecord HEIGHT_AVG, HEIGHT_MAX, HEIGHT_MIN
HydrationRecord VOLUME_TOTAL
MindfulnessSessionRecord MINDFULNESS_DURATION_TOTAL
NutritionRecord 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
PowerRecord POWER_AVG, POWER_MAX, POWER_MIN
RestingHeartRateRecord BPM_AVG, BPM_MAX, BPM_MIN
SkinTemperatureRecord TEMPERATURE_DELTA_AVG, TEMPERATURE_DELTA_MAX, TEMPERATURE_DELTA_MIN
SleepSessionRecord SLEEP_DURATION_TOTAL
SpeedRecord SPEED_AVG, SPEED_MAX, SPEED_MIN
StepsRecord COUNT_TOTAL
StepsCadenceRecord RATE_AVG, RATE_MAX, RATE_MIN
TotalCaloriesBurnedRecord ENERGY_TOTAL
WeightRecord WEIGHT_AVG, WEIGHT_MAX, WEIGHT_MIN
WheelchairPushesRecord COUNT_TOTAL