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.