Membaca data gabungan

Menggabungkan data di Health Connect meliputi agregasi dasar atau menggabungkan data ke dalam bucket. Alur kerja berikut menunjukkan cara melakukan keduanya.

Agregasi dasar

Untuk menggunakan agregasi dasar pada data, gunakan fungsi aggregate pada objek HealthConnectClient. Fungsi ini menerima objek AggregateRequest tempat Anda menambahkan jenis metrik dan rentang waktu sebagai parameternya. Cara penggabungan dasar dipanggil bergantung pada jenis metrik yang digunakan.

Agregasi kumulatif

Agregasi kumulatif menghitung nilai total.

Contoh berikut menunjukkan cara menggabungkan data untuk suatu jenis data:

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

Agregasi statistik

Agregasi statistik menghitung nilai minimum, maksimum, atau rata-rata data dengan sampel.

Contoh berikut menunjukkan cara menggunakan agregasi statistik:

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

Bucket

Health Connect juga dapat Anda gunakan untuk menggabungkan data ke dalam bucket. Dua jenis bucket yang dapat Anda gunakan meliputi duration dan periode.

Setelah dipanggil, fungsi ini akan menampilkan daftar bucket. Perlu diperhatikan bahwa daftar ini bisa sparse sehingga bucket tidak disertakan dalam daftar jika tidak berisi data apa pun.

Durasi

Dalam hal ini, data gabungan dibagi menjadi beberapa bucket dalam jangka waktu tetap, misalnya satu menit atau satu jam. Untuk menggabungkan data ke dalam bucket, gunakan aggregateGroupByDuration. Metode ini menerima objek AggregateGroupByDurationRequest tempat Anda menambahkan jenis metrik, rentang waktu, dan Duration sebagai parameter.

Berikut ini contoh langkah penggabungan ke dalam bucket berdurasi satu menit:

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

Periode

Dalam hal ini, data gabungan dibagi menjadi beberapa bucket dalam rentang waktu berbasis tanggal, misalnya satu minggu atau satu bulan. Untuk menggabungkan data ke dalam bucket, gunakan aggregateGroupByPeriod. Metode ini menerima objek AggregateGroupByPeriodRequest tempat Anda menambahkan jenis metrik, rentang waktu, dan Period sebagai parameter.

Berikut ini contoh langkah penggabungan ke dalam bucket bulanan:

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

Batasan baca

Secara default, aplikasi Anda dapat membaca data hingga 30 hari dengan izin apa pun yang diberikan. Dengan izin PERMISSION_READ_HEALTH_DATA_HISTORY, aplikasi Anda dapat membaca data yang lebih lama dari 30 hari.

Batasan 30 hari

Aplikasi dapat membaca data dari Health Connect hingga 30 hari sebelum izin apa pun pertama kali diberikan.

Namun, jika pengguna menghapus aplikasi Anda, histori izin akan hilang. Jika pengguna menginstal ulang aplikasi Anda dan memberikan izin lagi, aplikasi Anda dapat membaca data dari Health Connect hingga 30 hari sebelum tanggal baru tersebut.

Contoh 30 hari

Jika pengguna pertama kali memberikan izin baca ke aplikasi Anda pada 30 Maret 2023, data paling awal yang dapat dibaca kembali oleh aplikasi Anda akan berasal dari 28 Februari 2023 dan seterusnya.

Kemudian, pengguna tersebut menghapus aplikasi Anda pada 10 Mei 2023. Pengguna tersebut memutuskan untuk menginstal ulang pada 15 Mei 2023 dan memberikan izin baca. Tanggal awal data yang dapat dibaca aplikasi Anda sekarang adalah dari tanggal 15 April 2023.

Membaca data yang lebih lama dari 30 hari

Jika ingin membaca data yang lebih lama dari 30 hari, Anda harus menggunakan izin PERMISSION_READ_HEALTH_DATA_HISTORY. Tanpa izin ini, percobaan untuk membaca satu data yang lebih lama dari 30 hari akan menyebabkan error. Anda juga tidak dapat membaca data yang lebih lama dari 30 hari menggunakan salah satu permintaan rentang waktu.

Data gabungan yang terpengaruh oleh prioritas aplikasi yang dipilih pengguna

Pengguna akhir dapat menetapkan prioritas untuk aplikasi Tidur dan Aktivitas yang telah mereka integrasikan dengan Health Connect. Hanya pengguna akhir yang dapat mengubah daftar prioritas ini. Saat Anda melakukan pembacaan gabungan, Aggregate API memperhitungkan data duplikat dan hanya menyimpan data dari aplikasi dengan prioritas tertinggi. Data duplikat dapat terjadi jika pengguna memiliki beberapa aplikasi yang menulis jenis data yang sama—seperti jumlah langkah yang diambil atau jarak yang ditempuh—secara bersamaan.

Untuk informasi tentang cara pengguna akhir memprioritaskan aplikasi mereka, lihat Mengelola data Health Connect.

Pengguna dapat menambahkan atau menghapus aplikasi serta mengubah prioritasnya. Pengguna mungkin ingin menghapus aplikasi yang menulis data duplikat sehingga total data di layar Health Connect identik dengan aplikasi yang telah mereka berikan prioritas tertinggi. Total data diperbarui secara real time.

Meskipun Aggregate API menghitung data aplikasi Aktivitas dan Tidur dengan menghapus duplikat data sesuai dengan cara pengguna menetapkan prioritas, Anda masih dapat membuat logika Anda sendiri untuk menghitung data secara terpisah untuk setiap aplikasi yang menulis data tersebut.

Hanya jenis data Aktivitas dan Tidur yang dihapus duplikatnya oleh Health Connect, dan total data yang ditampilkan adalah nilai setelah penghapusan duplikat dilakukan oleh Aggregate API. Total ini menunjukkan hari penuh terbaru yang memiliki data untuk langkah dan jarak. Untuk jenis aplikasi lainnya, jumlah total semua aplikasi tersebut yang digabungkan ditampilkan dalam total data di Health Connect.

Pembacaan latar belakang

Anda dapat meminta aplikasi berjalan di latar belakang dan membaca data dari Health Connect. Jika Anda meminta izin Pembacaan Latar Belakang, pengguna dapat memberikan akses ke aplikasi Anda untuk membaca data di latar belakang.