1. Pengantar
Apa itu Health Connect?
Health Connect adalah platform data kesehatan untuk developer aplikasi Android. Layanan ini menyediakan satu antarmuka gabungan untuk akses ke data kesehatan dan kebugaran pengguna, serta perilaku fungsional yang konsisten di semua perangkat. Dengan Health Connect, pengguna memiliki penyimpanan data kesehatan dan kebugaran yang aman di perangkat, dengan kontrol dan transparansi penuh atas akses.
Bagaimana cara kerja Health Connect?
Health Connect mendukung lebih dari 50 jenis dan kategori data kesehatan dan kebugaran umum, termasuk aktivitas, tidur, nutrisi, pengukuran tubuh, dan tanda vital seperti detak jantung dan tekanan darah.
Dengan izin pengguna, developer dapat membaca dari dan menulis ke Health Connect dengan aman menggunakan skema standar dan perilaku API. Pengguna mendapatkan kontrol penuh atas setelan privasi mereka, dengan kontrol terperinci untuk melihat aplikasi mana yang meminta akses ke data pada waktu tertentu. Data di Health Connect disimpan di perangkat dan dienkripsi. Pengguna juga mendapatkan kemampuan untuk menonaktifkan akses atau menghapus data yang tidak mereka inginkan di perangkat, dan opsi untuk memprioritaskan satu sumber data daripada sumber data lainnya saat menggunakan beberapa aplikasi.
Arsitektur Health Connect
Berikut adalah penjelasan mengenai aspek utama dan komponen arsitektur Health Connect:
- Aplikasi klien: Untuk berintegrasi dengan Health Connect, aplikasi klien menautkan SDK ke dalam aplikasi kesehatan dan kebugaran mereka. Hal ini menyediakan platform API untuk berinteraksi dengan Health Connect API.
- Software Development Kit: SDK ini memungkinkan aplikasi klien berkomunikasi dengan Health Connect APK.
- Health Connect APK: Ini adalah APK yang mengimplementasikan Health Connect. APK ini berisi komponen Pengelolaan Izin dan Pengelolaan Data. APK Health Connect tersedia langsung di perangkat pengguna sehingga berorientasi pada perangkat, bukan akun.
- Pengelolaan izin: Health Connect mencakup antarmuka pengguna yang digunakan oleh aplikasi untuk meminta izin pengguna agar menampilkan data. Health Connect juga memberikan daftar izin pengguna yang ada. Tindakan ini memungkinkan pengguna mengelola akses yang telah mereka berikan atau tolak ke berbagai aplikasi.
- Pengelolaan data: Health Connect menyediakan antarmuka pengguna yang berisi ringkasan data yang dicatat, baik itu jumlah langkah pengguna, kecepatan bersepeda, detak jantung, maupun jenis data lainnya yang didukung.
Yang akan Anda bangun
Dalam Codelab ini, Anda akan membangun aplikasi kesehatan dan kebugaran sederhana yang terintegrasi dengan Health Connect. Aplikasi Anda akan melakukan hal berikut:
- Mendapatkan dan memeriksa izin pengguna untuk akses data.
- Menulis data ke Health Connect.
- Membaca data gabungan dari Health Connect.
Yang akan Anda pelajari
- Cara menyiapkan lingkungan Anda untuk mendukung pengembangan integrasi Health Connect.
- Cara mendapatkan izin dan menjalankan pemeriksaan izin.
- Cara mengontribusikan data kesehatan dan kebugaran ke platform Health Connect.
- Cara memanfaatkan penyimpanan data di perangkat.
- Cara memvalidasi aplikasi dengan alat developer yang disediakan Google.
Yang akan Anda butuhkan
- Android Studio versi stabil terbaru.
- Perangkat seluler Android dengan Android SDK versi 28 (Pie) atau lebih tinggi.
2. Mempersiapkan
Menyiapkan aplikasi Health Connect
Aplikasi Health Connect bertanggung jawab menangani semua permintaan yang dikirim aplikasi Anda melalui Health Connect SDK. Permintaan ini termasuk menyimpan data dan mengelola akses baca dan tulisnya.
Akses ke Health Connect bergantung pada versi Android yang diinstal di ponsel. Bagian berikut menguraikan cara menangani beberapa versi terbaru Android.
Android 14
Mulai Android 14 (Level API 34), Health Connect adalah bagian dari framework Android. Tidak diperlukan penyiapan karena versi Health Connect ini merupakan modul framework.
Android 13 dan yang lebih lama
Di Android 13 (Level API 33) dan versi yang lebih lama, Health Connect bukan merupakan bagian dari framework Android. Oleh karena itu, Anda perlu menginstal aplikasi Health Connect dari Google Play Store. Pindai kode QR untuk menginstal Health Connect.
Mendapatkan kode contoh
Mulai dengan meng-clone kode sumber dari GitHub:
git clone https://github.com/android/android-health-connect-codelab.git
Direktori contoh berisi kode start
dan finished
untuk Codelab ini. Pada tampilan Project di Android Studio, Anda akan menemukan dua modul:
start
: Kode awal untuk project ini, tempat Anda akan membuat perubahan pada kode ini untuk menyelesaikan codelab.finished
: Kode yang sudah selesai untuk codelab ini, tempat kode ini digunakan untuk memeriksa pekerjaan Anda.
Mempelajari kode 'start'
Aplikasi contoh Codelab memiliki UI dasar yang dibuat menggunakan Jetpack Compose dengan layar berikut:
WelcomeScreen
: Halaman landing aplikasi yang menampilkan pesan berbeda yang bergantung pada ketersediaan Health Connect, baik diinstal, tidak diinstal, atau tidak didukung.PrivacyPolicyScreen
: Bagian ini menjelaskan penggunaan izin aplikasi yang ditampilkan saat pengguna mengklik link Kebijakan privasi dalam dialog izin Health Connect.InputReadingsScreen
: Menunjukkan pembacaan dan penulisan catatan berat sederhana.ExerciseSessionScreen
: Di sinilah pengguna menyisipkan dan membuat daftar sesi latihan. Saat mengklik data, pengguna akan diarahkan keExerciseSessionDetailScreen
untuk menampilkan lebih banyak data yang terkait dengan sesi tersebut.DifferentialChangesScreen
: Menunjukkan cara mendapatkan token Perubahan dan mendapatkan perubahan baru dari Health Connect.
HealthConnectManager
menyimpan semua fungsi yang berinteraksi dengan Health Connect. Dalam Codelab ini, kami akan memandu Anda langkah demi langkah untuk menyelesaikan fungsi penting. String <!-- TODO:
pada build start
memiliki bagian yang sesuai dalam Codelab ini, tempat kode contoh diberikan agar dapat Anda masukkan ke dalam project.
Mari kita mulai dengan menambahkan Health Connect ke project.
Menambahkan SDK klien Health Connect
Untuk mulai menggunakan Health Connect SDK, Anda perlu menambahkan dependensi pada file build.gradle
. Untuk menemukan Health Connect versi terbaru, periksa rilis library Jetpack.
dependencies {
// Add a dependency of Health Connect SDK
implementation "androidx.health.connect:connect-client:1.1.0-alpha10"
}
Mendeklarasikan visibilitas Health Connect
Untuk berinteraksi dengan Health Connect
dalam aplikasi, deklarasikan nama paket Health Connect di AndroidManifest.xml
:
<!-- TODO: declare Health Connect visibility -->
<queries>
<package android:name="com.google.android.apps.healthdata" />
</queries>
Menjalankan project awal
Setelah semuanya siap, jalankan project start
. Pada tahap ini, Anda akan melihat layar sambutan yang menampilkan teks "Health Connect diinstal di perangkat ini" dan panel menu. Kita akan menambahkan fungsi untuk berinteraksi dengan Health Connect di bagian berikutnya.
3. Kontrol izin
Health Connect merekomendasikan developer untuk membatasi permintaan izin pada jenis data yang digunakan dalam aplikasi. Permintaan izin menyeluruh mengurangi kepercayaan pengguna pada aplikasi dan dapat menurunkan kepercayaan pengguna. Jika izin ditolak lebih dari dua kali, aplikasi Anda akan dikunci. Akibatnya, permintaan izin tidak akan muncul lagi.
Untuk tujuan Codelab ini, kita hanya memerlukan izin berikut:
- Sesi Latihan
- Detak Jantung
- Langkah
- Total Kalori yang Dibakar
- Berat
Mendeklarasikan izin
Setiap jenis data yang dibaca atau ditulis oleh aplikasi Anda harus dideklarasikan menggunakan izin di AndroidManifest.xml
. Mulai versi 1.0.0-alpha10
, Health Connect menggunakan format pernyataan izin Android standar.
Guna mendeklarasikan izin untuk jenis data yang diperlukan, gunakan elemen <uses-permission>
dan tetapkan namanya masing-masing dengan izin. Tempatkan keduanya di dalam tag <manifest>
. Untuk mengetahui daftar lengkap izin dan jenis data yang sesuai, lihat Daftar jenis data.
<!-- TODO: Required to specify which Health Connect permissions the app can request -->
<uses-permission android:name="android.permission.health.READ_HEART_RATE"/>
<uses-permission android:name="android.permission.health.WRITE_HEART_RATE"/>
<uses-permission android:name="android.permission.health.READ_STEPS"/>
<uses-permission android:name="android.permission.health.WRITE_STEPS"/>
<uses-permission android:name="android.permission.health.READ_EXERCISE"/>
<uses-permission android:name="android.permission.health.WRITE_EXERCISE"/>
<uses-permission android:name="android.permission.health.READ_TOTAL_CALORIES_BURNED"/>
<uses-permission android:name="android.permission.health.WRITE_TOTAL_CALORIES_BURNED"/>
<uses-permission android:name="android.permission.health.READ_WEIGHT"/>
<uses-permission android:name="android.permission.health.WRITE_WEIGHT"/>
Deklarasikan filter intent dalam AndroidManifest.xml
untuk menangani intent yang menjelaskan cara aplikasi Anda menggunakan izin tersebut. Aplikasi Anda harus menangani intent ini dan menampilkan kebijakan privasi yang menjelaskan cara data pengguna digunakan dan ditangani. Intent ini dikirim ke aplikasi setelah pengguna mengetuk link Kebijakan privasi di dialog izin Health Connect.
<!-- TODO: Add intent filter to handle permission rationale intent -->
<!-- Permission handling for Android 13 and before -->
<intent-filter>
<action android:name="androidx.health.ACTION_SHOW_PERMISSIONS_RATIONALE" />
</intent-filter>
<!-- Permission handling for Android 14 and later -->
<intent-filter>
<action android:name="android.intent.action.VIEW_PERMISSION_USAGE"/>
<category android:name="android.intent.category.HEALTH_PERMISSIONS"/>
</intent-filter>
Sekarang buka kembali aplikasi untuk melihat izin yang dideklarasikan. Klik Setelan dari panel menu untuk membuka layar Setelan Health Connect. Kemudian, klik Izin aplikasi tempat Anda akan melihat Codelab Health Connect dalam daftar. Klik Health Connect Codelab guna menampilkan daftar jenis data untuk akses baca dan tulis di aplikasi tersebut.
Meminta izin
Selain mengarahkan pengguna langsung ke Setelan Health Connect untuk mengelola izin, Anda juga dapat meminta izin dari aplikasi melalui Health Connect API. Perhatikan bahwa pengguna dapat mengubah izin kapan saja, jadi pastikan aplikasi Anda memeriksa apakah izin yang diperlukan tersedia. Dalam project Codelab, kita memeriksa dan mengirim permintaan izin sebelum membaca atau menulis data.
HealthConnectClient
adalah titik entri ke Health Connect API. Di HealthConnectManager.kt
, dapatkan instance HealthConnectClient
.
private val healthConnectClient by lazy { HealthConnectClient.getOrCreate(context) }
Untuk memulai dialog permintaan izin dalam aplikasi, pertama-tama build kumpulan izin untuk jenis data yang diperlukan. Anda hanya boleh meminta izin untuk jenis data yang akan digunakan.
Misalnya, di layar Rekam berat, Anda hanya perlu memberikan izin baca dan tulis untuk Berat. Kami telah membuat izin yang disetel di InputReadingsViewModel.kt
seperti yang ditunjukkan pada kode berikut.
val permissions = setOf(
HealthPermission.getReadPermission(WeightRecord::class),
HealthPermission.getWritePermission(WeightRecord::class),
)
Kemudian, periksa apakah izin telah diberikan sebelum meluncurkan permintaan izin. Di HealthConnectManager.kt
, gunakan getGrantedPermissions
untuk memastikan apakah izin jenis data yang diperlukan diberikan. Untuk meluncurkan permintaan izin, Anda harus membuat ActivityResultContract
dengan menggunakan PermissionController.createRequestPermissionResultContract()
, yang harus diluncurkan saat izin yang diperlukan tidak diberikan.
suspend fun hasAllPermissions(permissions: Set<String>): Boolean {
return healthConnectClient.permissionController.getGrantedPermissions().containsAll(permissions)
}
fun requestPermissionsActivityContract(): ActivityResultContract<Set<String>, Set<String>> {
return PermissionController.createRequestPermissionResultContract()
}
Dalam aplikasi contoh Codelab, Anda mungkin melihat tombol Minta izin yang ditampilkan di layar jika belum memberikan izin ke jenis data yang diperlukan. Klik Minta izin untuk membuka dialog izin Health Connect. Berikan izin yang diperlukan dan kembali ke aplikasi Codelab.
4. Menulis data
Mari kita mulai menulis catatan ke Health Connect. Untuk menulis data Berat, buat objek WeightRecord
dengan nilai input bobot. Perhatikan bahwa Health Connect SDK mendukung berbagai class unit. Misalnya, gunakan Mass.kilograms(weightInput)
untuk menetapkan berat pengguna dalam kilogram.
Semua data yang ditulis ke Health Connect harus menentukan informasi offset zona waktu. Menentukan informasi offset zona Waktu saat menulis data memberikan informasi zona waktu saat membaca data di Health Connect.
Setelah membuat catatan berat, gunakan healthConnectClient.insertRecords
untuk menulis data ke Health Connect.
/**
* TODO: Writes [WeightRecord] to Health Connect.
*/
suspend fun writeWeightInput(weightInput: Double) {
val time = ZonedDateTime.now().withNano(0)
val weightRecord = WeightRecord(
weight = Mass.kilograms(weightInput),
time = time.toInstant(),
zoneOffset = time.offset
)
val records = listOf(weightRecord)
try {
healthConnectClient.insertRecords(records)
Toast.makeText(context, "Successfully insert records", Toast.LENGTH_SHORT).show()
} catch (e: Exception) {
Toast.makeText(context, e.message.toString(), Toast.LENGTH_SHORT).show()
}
}
Sekarang, mari kita jalankan aplikasi. Klik Rekam berat lalu masukkan catatan berat baru dalam kilogram. Untuk memverifikasi apakah catatan berat berhasil ditulis ke Health Connect, buka aplikasi Health Connect di Setelan, lalu buka Data dan akses > Pengukuran tubuh > Berat > Lihat semua entri. Anda akan melihat catatan berat baru yang ditulis dari Health Connect Codelab.
Menulis sesi latihan
Sesi adalah interval waktu selama pengguna melakukan aktivitas. Sesi latihan di Health Connect dapat mencakup semua hal, mulai dari berlari hingga bulu tangkis. Sesi memungkinkan pengguna mengukur performa berdasarkan waktu. Data ini mencatat array sampel instan yang diukur selama jangka waktu tertentu, misalnya detak jantung berkelanjutan atau sampel lokasi selama aktivitas.
Contoh berikut menunjukkan cara menulis sesi latihan. Gunakan healthConnectClient.insertRecords
untuk menyisipkan beberapa catatan data yang terkait dengan sesi. Permintaan penyisipan dalam contoh ini mencakup ExerciseSessionRecord
dengan ExerciseType
, StepsRecord
dengan jumlah langkah, TotalCaloriesBurnedRecord
dengan Energy
, dan serangkaian sampel HeartRateRecord
.
/**
* TODO: Writes an [ExerciseSessionRecord] to Health Connect.
*/
suspend fun writeExerciseSession(start: ZonedDateTime, end: ZonedDateTime) {
healthConnectClient.insertRecords(
listOf(
ExerciseSessionRecord(
startTime = start.toInstant(),
startZoneOffset = start.offset,
endTime = end.toInstant(),
endZoneOffset = end.offset,
exerciseType = ExerciseSessionRecord.EXERCISE_TYPE_RUNNING,
title = "My Run #${Random.nextInt(0, 60)}"
),
StepsRecord(
startTime = start.toInstant(),
startZoneOffset = start.offset,
endTime = end.toInstant(),
endZoneOffset = end.offset,
count = (1000 + 1000 * Random.nextInt(3)).toLong()
),
TotalCaloriesBurnedRecord(
startTime = start.toInstant(),
startZoneOffset = start.offset,
endTime = end.toInstant(),
endZoneOffset = end.offset,
energy = Energy.calories((140 + Random.nextInt(20)) * 0.01)
)
) + buildHeartRateSeries(start, end)
)
}
/**
* TODO: Build [HeartRateRecord].
*/
private fun buildHeartRateSeries(
sessionStartTime: ZonedDateTime,
sessionEndTime: ZonedDateTime,
): HeartRateRecord {
val samples = mutableListOf<HeartRateRecord.Sample>()
var time = sessionStartTime
while (time.isBefore(sessionEndTime)) {
samples.add(
HeartRateRecord.Sample(
time = time.toInstant(),
beatsPerMinute = (80 + Random.nextInt(80)).toLong()
)
)
time = time.plusSeconds(30)
}
return HeartRateRecord(
startTime = sessionStartTime.toInstant(),
startZoneOffset = sessionStartTime.offset,
endTime = sessionEndTime.toInstant(),
endZoneOffset = sessionEndTime.offset,
samples = samples
)
}
5. Membaca data
Sekarang setelah Anda menulis catatan Sesi Latihan dan Berat dengan aplikasi contoh Codelab atau aplikasi Toolbox, mari kita gunakan Health Connect API untuk membaca catatan tersebut. Pertama-tama, buat ReadRecordsRequest
dan tentukan jenis data dan rentang waktu untuk membaca data. ReadRecordsRequest
juga dapat menetapkan dataOriginFilter
untuk menentukan aplikasi sumber data yang ingin Anda baca.
/**
* TODO: Reads in existing [WeightRecord]s.
*/
suspend fun readWeightInputs(start: Instant, end: Instant): List<WeightRecord> {
val request = ReadRecordsRequest(
recordType = WeightRecord::class,
timeRangeFilter = TimeRangeFilter.between(start, end)
)
val response = healthConnectClient.readRecords(request)
return response.records
}
/**
* TODO: Obtains a list of [ExerciseSessionRecord]s in a specified time frame.
*/
suspend fun readExerciseSessions(start: Instant, end: Instant): List<ExerciseSessionRecord> {
val request = ReadRecordsRequest(
recordType = ExerciseSessionRecord::class,
timeRangeFilter = TimeRangeFilter.between(start, end)
)
val response = healthConnectClient.readRecords(request)
return response.records
}
Sekarang, mari kita jalankan aplikasi dan periksa apakah Anda dapat melihat daftar catatan berat dan sesi latihan.
6. Membaca data di latar belakang
Mendeklarasikan izin
Untuk mengakses data kesehatan di latar belakang, deklarasikan izin READ_HEALTH_DATA_IN_BACKGROUND
di file AndroidManifest.xml
Anda.
<!-- TODO: Required to specify which Health Connect permissions the app can request -->
...
<uses-permission android:name="android.permission.health.READ_HEALTH_DATA_IN_BACKGROUND" />
Memeriksa ketersediaan fitur
Karena pengguna mungkin tidak selalu memiliki Health Connect versi terbaru, sebaiknya verifikasi ketersediaan fitur terlebih dahulu. Di HealthConnectManager.kt
, kita menggunakan metode getFeatureStatus
untuk melakukannya.
fun isFeatureAvailable(feature: Int): Boolean{
return healthConnectClient
.features
.getFeatureStatus(feature) == HealthConnectFeatures.FEATURE_STATUS_AVAILABLE
}
Fungsi baca di latar belakang pada ExerciseSessionViewModel.kt
diverifikasi menggunakan konstanta FEATURE_READ_HEALTH_DATA_IN_BACKGROUND
:
backgroundReadAvailable.value = healthConnectManager.isFeatureAvailable(
HealthConnectFeatures.FEATURE_READ_HEALTH_DATA_IN_BACKGROUND
)
Meminta izin
Setelah memverifikasi bahwa fitur baca di latar belakang tersedia, Anda dapat meminta izin PERMISSION_READ_HEALTH_DATA_IN_BACKGROUND dengan mengklik Minta Baca di Latar Belakang di layar Sesi latihan.
Pengguna akan melihat perintah berikut:
Pengguna juga dapat memberikan akses ke fungsi baca di latar belakang dengan membuka Health Connect > Izin aplikasi > Health Connect Codelab > Akses tambahan di setelan sistem:
Membaca data di latar belakang
Gunakan WorkManager
untuk menjadwalkan tugas latar belakang. Setelah mengetuk tombol Baca Langkah di Latar Belakang, aplikasi akan memulai ReadStepWorker
setelah penundaan 10 detik. Pekerja ini akan mengambil total jumlah langkah dari Health Connect selama 24 jam terakhir. Selanjutnya, entri log serupa yang menjelaskan informasi ini akan muncul di Logcat:
There are 4000 steps in Health Connect in the last 24 hours.
7. Membaca data diferensial
Differential Changes API Health Connect membantu melacak perubahan dari titik waktu tertentu untuk sekumpulan jenis data. Misalnya, Anda ingin tahu apakah pengguna telah memperbarui atau menghapus catatan yang ada di luar aplikasi sehingga Anda dapat memperbarui database.
Pembacaan data dengan Health Connect dibatasi untuk aplikasi yang berjalan di latar depan. Pembatasan ini diberlakukan untuk lebih memperkuat privasi pengguna. Pembatasan ini memberi tahu dan meyakinkan pengguna bahwa Health Connect tidak memiliki akses baca latar belakang ke data mereka dan bahwa data hanya dibaca serta diakses di latar depan. Saat aplikasi berada di latar depan, Differential Changes API memungkinkan developer mengambil perubahan yang dilakukan pada Health Connect dengan men-deploy token Perubahan.
Di HealthConnectManager.kt
ada dua fungsi, yaitu getChangesToken()
dan getChanges()
. Kita akan menambahkan Differential Changes API ke fungsi ini untuk mendapatkan perubahan data.
Penyiapan token Perubahan awal
Perubahan data hanya diambil dari Health Connect saat aplikasi Anda memintanya dengan token Perubahan. Token Perubahan ini mewakili titik di histori commit yang menjadi asal pengambilan data diferensial.
Untuk mendapatkan token Perubahan, kirim ChangesTokenRequest
dengan kumpulan jenis data yang ingin Anda lacak perubahan datanya. Simpan token dan gunakan saat Anda ingin mengambil info terbaru dari Health Connect.
/**
* TODO: Obtains a Changes token for the specified record types.
*/
suspend fun getChangesToken(): String {
return healthConnectClient.getChangesToken(
ChangesTokenRequest(
setOf(
ExerciseSessionRecord::class
)
)
)
}
Update data dengan token Perubahan
Jika Anda ingin mendapatkan perubahan sejak terakhir kali aplikasi Anda disinkronkan dengan Health Connect, gunakan token Perubahan yang Anda peroleh sebelumnya dan kirim panggilan getChanges
dengan token. ChangesResponse
menampilkan daftar perubahan yang diamati dari Health Connect seperti UpsertionChange
dan DeletionChange
.
/**
* TODO: Retrieve changes from a Changes token.
*/
suspend fun getChanges(token: String): Flow<ChangesMessage> = flow {
var nextChangesToken = token
do {
val response = healthConnectClient.getChanges(nextChangesToken)
if (response.changesTokenExpired) {
throw IOException("Changes token has expired")
}
emit(ChangesMessage.ChangeList(response.changes))
nextChangesToken = response.nextChangesToken
} while (response.hasMore)
emit(ChangesMessage.NoMoreChanges(nextChangesToken))
}
Sekarang, mari kita jalankan aplikasi dan buka layar Perubahan. Pertama, aktifkan Lacak perubahan untuk mendapatkan token Perubahan. Kemudian masukkan sesi latihan atau berat dari Toolbox atau dari aplikasi Codelab. Kembali ke layar Perubahan, lalu pilih Dapatkan perubahan baru. Anda akan melihat perubahan pembaruan sekarang.
8. Data gabungan
Health Connect juga menyediakan data gabungan melalui API gabungan. Contoh berikut menunjukkan cara mendapatkan data kumulatif dan statistik dari Health Connect.
Gunakan healthConnectClient.aggregate
untuk mengirim AggregateRequest
. Dalam permintaan gabungan, tentukan kumpulan metrik gabungan dan rentang waktu yang ingin Anda dapatkan. Misalnya, ExerciseSessionRecord.EXERCISE_DURATION_TOTAL
dan StepsRecord.COUNT_TOTAL
menyediakan data kumulatif, sedangkan WeightRecord.WEIGHT_AVG
, HeartRateRecord.BPM_MAX
, dan HeartRateRecord.BPM_MIN
memberikan data statistik.
/**
* TODO: Returns the weekly average of [WeightRecord]s.
*/
suspend fun computeWeeklyAverage(start: Instant, end: Instant): Mass? {
val request = AggregateRequest(
metrics = setOf(WeightRecord.WEIGHT_AVG),
timeRangeFilter = TimeRangeFilter.between(start, end)
)
val response = healthConnectClient.aggregate(request)
return response[WeightRecord.WEIGHT_AVG]
}
Contoh ini menunjukkan cara mendapatkan data agregasi terkait untuk sesi latihan tertentu. Pertama, baca data menggunakan healthConnectClient.readRecord
dengan uid
. Kemudian, gunakan startTime
dan endTime
sesi latihan sebagai rentang waktu dan dataOrigin
sebagai filter untuk membaca agregasi terkait.
/**
* TODO: Reads aggregated data and raw data for selected data types, for a given [ExerciseSessionRecord].
*/
suspend fun readAssociatedSessionData(
uid: String,
): ExerciseSessionData {
val exerciseSession = healthConnectClient.readRecord(ExerciseSessionRecord::class, uid)
// Use the start time and end time from the session, for reading raw and aggregate data.
val timeRangeFilter = TimeRangeFilter.between(
startTime = exerciseSession.record.startTime,
endTime = exerciseSession.record.endTime
)
val aggregateDataTypes = setOf(
ExerciseSessionRecord.EXERCISE_DURATION_TOTAL,
StepsRecord.COUNT_TOTAL,
TotalCaloriesBurnedRecord.ENERGY_TOTAL,
HeartRateRecord.BPM_AVG,
HeartRateRecord.BPM_MAX,
HeartRateRecord.BPM_MIN,
)
// Limit the data read to just the application that wrote the session. This may or may not
// be desirable depending on the use case: In some cases, it may be useful to combine with
// data written by other apps.
val dataOriginFilter = setOf(exerciseSession.record.metadata.dataOrigin)
val aggregateRequest = AggregateRequest(
metrics = aggregateDataTypes,
timeRangeFilter = timeRangeFilter,
dataOriginFilter = dataOriginFilter
)
val aggregateData = healthConnectClient.aggregate(aggregateRequest)
val heartRateData = readData<HeartRateRecord>(timeRangeFilter, dataOriginFilter)
return ExerciseSessionData(
uid = uid,
totalActiveTime = aggregateData[ExerciseSessionRecord.EXERCISE_DURATION_TOTAL],
totalSteps = aggregateData[StepsRecord.COUNT_TOTAL],
totalEnergyBurned = aggregateData[TotalCaloriesBurnedRecord.ENERGY_TOTAL],
minHeartRate = aggregateData[HeartRateRecord.BPM_MIN],
maxHeartRate = aggregateData[HeartRateRecord.BPM_MAX],
avgHeartRate = aggregateData[HeartRateRecord.BPM_AVG],
heartRateSeries = heartRateData,
)
}
Sekarang, mari kita jalankan aplikasi dan periksa apakah Anda dapat melihat berat rata-rata di layar Catat berat. Anda juga dapat melihat data terperinci sesi latihan dengan membuka layar Sesi latihan dan memilih salah satu catatan sesi latihan.
9. Selamat
Selamat, Anda berhasil membuat aplikasi kesehatan dan kebugaran terintegrasi Health Connect pertama Anda.
Aplikasi dapat mendeklarasikan izin dan meminta izin pengguna pada jenis data yang digunakan dalam aplikasi. Aplikasi ini juga dapat membaca dan menulis data dari penyimpanan data Health Connect. Anda juga telah mempelajari cara menggunakan Toolbox Health Connect untuk mendukung pengembangan aplikasi Anda dengan membuat data tiruan di penyimpanan data Health Connect.
Anda sekarang tahu langkah-langkah utama yang diperlukan untuk menjadikan aplikasi kesehatan dan kebugaran Anda sebagai bagian dari ekosistem Health Connect.