Panduan ini kompatibel dengan Health Connect versi 1.1.0 atau yang lebih baru.
Jika Anda ingin membuat aplikasi yang mengelola tanda vital pengguna, Anda dapat menggunakan Health Connect untuk melakukan hal-hal seperti:
- Membaca data tanda vital seperti tekanan darah, detak jantung, dan suhu tubuh dari aplikasi lain
- Menulis data tanda vital yang direkam oleh aplikasi atau perangkat terhubung Anda
- Memantau tren dan memberikan insight kesehatan berdasarkan data tanda vital
Panduan ini menjelaskan cara menggunakan jenis data vital, yang mencakup izin, alur kerja baca dan tulis, serta praktik terbaik.
Ringkasan: Membangun Pelacak Tanda Vital yang Komprehensif
Anda dapat membangun pengalaman pelacakan tanda vital yang komprehensif menggunakan Health Connect dengan mengikuti langkah-langkah inti berikut:
- Meminta izin yang sesuai untuk jenis data tanda vital.
- Menulis data tanda vital menggunakan data seperti
BloodPressureRecord,HeartRateRecord, dan data tanda vital lainnya. - Membaca data tanda vital untuk ditampilkan, dianalisis, atau disinkronkan.
- Menggunakan pengelompokan untuk penulisan dan pembacaan data yang efisien.
Alur kerja ini memungkinkan interoperabilitas dengan aplikasi Health Connect lainnya dan memverifikasi akses data yang dikontrol pengguna.
Sebelum memulai
Sebelum menerapkan fitur vitals:
- Integrasikan Health Connect menggunakan dependensi yang sesuai.
- Buat instance
HealthConnectClient. - Pastikan aplikasi Anda menerapkan alur izin runtime berdasarkan Izin Kesehatan.
Konsep utama
Data tanda vital di Health Connect diwakili oleh berbagai jenis data, yang masing-masing sesuai dengan pengukuran fisiologis tertentu. Tidak seperti sesi olahraga, data vital sering kali dicatat sebagai data titik waktu atau berbasis interval.
Jenis data tanda vital
Data tanda vital diwakili oleh setiap jenis data. Jenis yang umum meliputi:
BloodPressureRecord: Mewakili satu pembacaan tekanan darah, termasuk tekanan sistolik dan diastolik, serta posisi tubuh.HeartRateRecord: Mewakili serangkaian pengukuran detak jantung.RestingHeartRateRecord: Mewakili satu pengukuran detak jantung saat istirahat.BodyTemperatureRecord: Mewakili satu pembacaan suhu tubuh, termasuk lokasi pengukuran.BloodGlucoseRecord: Menampilkan satu pembacaan glukosa darah, termasuk hubungannya dengan makanan dan sumber spesimen.OxygenSaturationRecord: Mewakili satu pembacaan saturasi oksigen dalam darah.RespiratoryRateRecord: Mewakili satu pengukuran laju pernapasan.
Untuk mengetahui daftar lengkap jenis data, lihat Jenis data Health Connect.
Pertimbangan pengembangan
Data tanda vital dapat bersifat sensitif, dan aplikasi mungkin perlu menulis data sebagai respons terhadap pengukuran dari sensor atau input pengguna, atau menyinkronkan data dari backend. Izin sangat penting untuk menangani data tanda vital.
Izin
Aplikasi Anda harus meminta izin Health Connect yang relevan sebelum membaca atau menulis data tanda vital. Izin umum untuk tanda vital mencakup tekanan darah, detak jantung, suhu tubuh, glukosa darah, saturasi oksigen, dan laju pernapasan. Ini mencakup hal-hal berikut:
- Tekanan Darah: Izin baca dan tulis untuk
BloodPressureRecord. - Detak Jantung: Izin baca dan tulis untuk
HeartRateRecord. - Detak Jantung Saat Istirahat: Izin baca dan tulis untuk
RestingHeartRateRecord. - Suhu Tubuh: Izin baca dan tulis untuk
BodyTemperatureRecord. - Glukosa Darah: Izin baca dan tulis untuk
BloodGlucoseRecord. - Saturasi Oksigen: Izin baca dan tulis untuk
OxygenSaturationRecord. - Laju Pernapasan: Izin baca dan tulis untuk
RespiratoryRateRecord.
Berikut adalah contoh cara meminta izin untuk tekanan darah, detak jantung, dan suhu tubuh:
Setelah membuat instance klien, aplikasi Anda perlu meminta izin dari pengguna. Pengguna harus diizinkan untuk memberikan atau menolak izin kapan saja. Untuk melakukannya, buat kumpulan izin untuk jenis data yang diperlukan. Pastikan izin dalam kumpulan dideklarasikan dalam manifes Android Anda terlebih dahulu.
val permissions = setOf( HealthPermission.getReadPermission(BloodPressureRecord::class), HealthPermission.getWritePermission(BloodPressureRecord::class), HealthPermission.getReadPermission(HeartRateRecord::class), HealthPermission.getWritePermission(HeartRateRecord::class), HealthPermission.getReadPermission(BodyTemperatureRecord::class), HealthPermission.getWritePermission(BodyTemperatureRecord::class) )
getGrantedPermissions
untuk mengetahui apakah aplikasi Anda sudah mendapatkan izin yang diperlukan. Jika belum, gunakan
createRequestPermissionResultContract
untuk meminta izin tersebut. Tindakan ini akan menampilkan layar izin Health Connect.
val permissions = setOf( HealthPermission.getReadPermission(StepsRecord::class), HealthPermission.getWritePermission(StepsRecord::class), HealthPermission.getReadPermission(HeartRateRecord::class), HealthPermission.getWritePermission(HeartRateRecord::class) ) val requestPermissionsLauncher = rememberLauncherForActivityResult( contract = PermissionController.createRequestPermissionResultContract() ) { grantedPermissions -> if (grantedPermissions.containsAll(permissions)) { coroutineScope.launch { snackbarHostState.showSnackbar("Permissions granted!") } } else { coroutineScope.launch { snackbarHostState.showSnackbar("Permissions denied.") } } }
Untuk meminta izin, panggil fungsi checkPermissionsAndRun:
if (!granted.containsAll(permissions)) { // Check if required permissions are not granted, and return return emptySet() } // Permissions already granted; proceed with inserting or reading data
Jika Anda hanya perlu meminta izin untuk satu jenis data, seperti tekanan darah, sertakan hanya jenis data tersebut dalam set izin Anda:
Akses ke tekanan darah dilindungi oleh izin berikut:
android.permission.health.READ_BLOOD_PRESSUREandroid.permission.health.WRITE_BLOOD_PRESSURE
Untuk menambahkan kemampuan tekanan darah ke aplikasi Anda, mulailah dengan meminta
izin untuk jenis data BloodPressureRecord.
Berikut adalah izin yang harus Anda deklarasikan agar dapat menulis tekanan darah:
<application>
<uses-permission
android:name="android.permission.health.WRITE_BLOOD_PRESSURE" />
...
</application>
Untuk membaca tekanan darah, Anda perlu meminta izin berikut:
<application>
<uses-permission
android:name="android.permission.health.READ_BLOOD_PRESSURE" />
...
</application>
Menulis data tanda vital
Bagian ini menjelaskan cara menulis data tanda vital ke Health Connect. Data tanda vital biasanya ditulis sebagai data individual. Jika Anda menulis beberapa data sekaligus, seperti menyinkronkan dari sensor atau backend, gunakan pengelompokan.
Contoh penulisan BloodPressureRecord:
suspend fun writeBloodPressureRecord(healthConnectClient: HealthConnectClient) { val record = BloodPressureRecord( time = Instant.now(), zoneOffset = ZoneOffset.UTC, systolic = Pressure.millimetersOfMercury(120.0), diastolic = Pressure.millimetersOfMercury(80.0), bodyPosition = BloodPressureRecord.BODY_POSITION_SITTING_DOWN, measurementLocation = BloodPressureRecord.MEASUREMENT_LOCATION_LEFT_WRIST ) healthConnectClient.insertRecords(listOf(record)) }
Penulisan batch
Jika aplikasi Anda perlu menulis beberapa titik data, seperti menyinkronkan data dari perangkat terhubung atau layanan backend, Anda harus mengelompokkan penulisan untuk meningkatkan efisiensi dan mengurangi konsumsi baterai. Health Connect dapat menangani hingga 1.000 data dalam satu permintaan tulis.
Kode berikut menunjukkan cara menulis beberapa data sekaligus dalam batch:
suspend fun writeBatchRecords(healthConnectClient: HealthConnectClient) { val bloodPressureRecord = BloodPressureRecord( time = Instant.now(), zoneOffset = ZoneOffset.UTC, systolic = Pressure.millimetersOfMercury(120.0), diastolic = Pressure.millimetersOfMercury(80.0), bodyPosition = BloodPressureRecord.BODY_POSITION_SITTING_DOWN, measurementLocation = BloodPressureRecord.MEASUREMENT_LOCATION_LEFT_WRIST ) val heartRateRecord = HeartRateRecord( startTime = Instant.now().minusSeconds(60), startZoneOffset = ZoneOffset.UTC, endTime = Instant.now(), endZoneOffset = ZoneOffset.UTC, samples = listOf(HeartRateRecord.Sample(time = Instant.now().minusSeconds(30), beatsPerMinute = 80)) ) healthConnectClient.insertRecords(listOf(bloodPressureRecord, heartRateRecord)) }
Membaca data tanda vital
Aplikasi dapat membaca data tanda vital untuk menampilkan pengukuran, menganalisis tren, atau menyinkronkan data
dengan server eksternal. Untuk membaca tanda vital, gunakan ReadRecordsRequest dengan
jenis data tertentu dan filter menurut rentang waktu.
Contoh pembacaan data BloodPressureRecord:
suspend fun readBloodPressureRecords( healthConnectClient: HealthConnectClient, startTime: Instant, endTime: Instant ) { val response = healthConnectClient.readRecords( ReadRecordsRequest( recordType = BloodPressureRecord::class, timeRangeFilter = TimeRangeFilter.between(startTime, endTime) ) ) for (record in response.records) { // Process each blood pressure record val systolic = record.systolic val diastolic = record.diastolic } }
Jika Anda perlu menyinkronkan data tanda vital dengan server backend, atau terus mengupdate datastore aplikasi dengan Health Connect, gunakan ChangeLogs. Dengan begitu, Anda dapat mengambil daftar data yang disisipkan, diperbarui, atau dihapus sejak waktu tertentu, yang lebih efisien daripada melacak perubahan secara manual atau membaca semua data berulang kali. Untuk mengetahui informasi selengkapnya, lihat Menyinkronkan data dengan Health Connect.
Praktik terbaik
Ikuti panduan ini untuk meningkatkan keandalan data dan pengalaman pengguna:
- Permintaan tulis batch: Untuk mengurangi overhead Input/Output dan menghemat masa pakai baterai, kelompokkan titik data ke dalam satu panggilan
insertRecordsdengan batch hingga 1.000 data, daripada menulis setiap titik satu per satu. - Tulis data secara berkala selama pelacakan langsung: Untuk update rutin dari sensor (seperti alat pemantau glukosa berkelanjutan atau alat pemantau detak jantung), tulis data dalam batch dengan interval hingga 15 menit untuk menyeimbangkan update real-time dengan efisiensi baterai.
- Gunakan WorkManager untuk sinkronisasi latar belakang: Gunakan
WorkManageruntuk penulisan yang ditangguhkan, seperti menyinkronkan data dari perangkat pendamping atau layanan backend. Usahakan interval 15 menit untuk penulisan batch. - Menghindari penulisan data duplikat: Gunakan Client ID: Saat membuat data, tetapkan
metadata.clientRecordId. Health Connect menggunakan ID ini untuk mengidentifikasi data unik. Jika Anda mencoba menulis data denganclientRecordIdyang sudah ada, Health Connect akan mengabaikan duplikat atau memperbarui data yang ada, bukan membuat data baru. Menetapkanmetadata.clientRecordIdadalah cara paling efektif untuk mencegah duplikat selama percobaan ulang sinkronisasi atau penginstalan ulang aplikasi.val record = StepsRecord( count = 100, startTime = startTime, endTime = endTime, startZoneOffset = ZoneOffset.UTC, endZoneOffset = ZoneOffset.UTC, metadata = Metadata( // Use a unique ID from your own database clientRecordId = "daily_steps_2023_10_27_user_123" ) )
- Periksa data yang ada: Sebelum menyinkronkan data, buat kueri Health Connect untuk data dalam rentang waktu sinkronisasi guna melihat apakah data dari aplikasi Anda sudah ada, untuk menghindari duplikat atau menimpa data yang lebih baru.
- Berikan alasan yang jelas untuk izin: Gunakan alur
Permission.createIntentuntuk menjelaskan alasan aplikasi Anda memerlukan akses ke data kesehatan, misalnya: 'Untuk memantau tren tekanan darah Anda dan memberikan insight'. - Selaraskan stempel waktu dengan pengukuran: Pastikan stempel waktu data mencerminkan secara akurat waktu pengukuran dilakukan. Untuk data interval seperti
HeartRateRecord, verifikasi bahwastartTimedanendTimesudah benar.
Pengujian
Untuk memverifikasi kebenaran data dan pengalaman pengguna yang berkualitas tinggi, ikuti strategi pengujian ini dan lihat dokumentasi resmi Menguji kasus penggunaan teratas.
Alat verifikasi
- Toolbox Health Connect: Gunakan aplikasi pendamping ini untuk memeriksa data secara manual, menghapus data pengujian, dan menyimulasikan perubahan pada database. Ini adalah cara terbaik untuk memverifikasi bahwa data Anda disimpan dengan benar.
- Pengujian unit dengan
FakeHealthConnectClient: Gunakan library pengujian untuk memverifikasi cara aplikasi Anda menangani kasus ekstrem, seperti pencabutan izin atau pengecualian API tanpa memerlukan perangkat fisik.
Checklist kualitas
Arsitektur umum
Implementasi data vital biasanya mencakup:
| Komponen | Mengelola |
|---|---|
| Pengontrol tanda vital | Pembacaan sensor/input Logika pengelompokan |
| Lapisan repositori (menggabungkan operasi Health Connect:) | Menyisipkan data tanda vital Membaca data tanda vital |
| Lapisan UI (Tampilan): | Pembacaan langsung Data historis Diagram dan tren |
Pemecahan masalah
| Gejala | Kemungkinan penyebab | Resolusi |
|---|---|---|
| Jenis data yang tidak ada (Misalnya, Tekanan Darah) | Izin tulis tidak ada atau filter waktu salah. | Pastikan Anda telah meminta dan pengguna telah memberikan izin jenis data tertentu. Pastikan ReadRecordsRequest Anda menggunakan TimeRangeFilter yang mencakup waktu pengukuran. Lihat Izin. |
| Data duplikat muncul | clientRecordId tidak ada. |
Tetapkan clientRecordId unik di Metadata setiap data. Hal ini memungkinkan Health Connect melakukan penghapusan duplikat jika data yang sama ditulis dua kali selama percobaan ulang sinkronisasi. Lihat Praktik terbaik. |
| Data gagal ditulis | Unit atau nilai salah di luar rentang yang valid. | Health Connect memvalidasi nilai data. Misalnya, nilai tekanan darah harus berada dalam rentang yang masuk akal secara fisiologis. Periksa dokumentasi jenis data untuk mengetahui rentang dan unit yang valid. |
Langkah-langkah proses debug umum
| Memeriksa status izin. | Selalu panggil getPermissionStatus() sebelum mencoba operasi baca atau tulis. Pengguna dapat mencabut izin di setelan sistem kapan saja. |