Jika Anda ingin membuat aplikasi yang mengelola data 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 vital yang direkam oleh aplikasi atau perangkat terhubung
- Memantau tren dan memberikan insight kesehatan berdasarkan data tanda vital
Panduan ini menjelaskan cara menggunakan jenis data penting, yang mencakup izin, alur kerja baca dan tulis, serta praktik terbaik.
Ringkasan: Membuat Pelacak Vitals yang Komprehensif
Anda dapat membuat pengalaman pelacakan data 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 rekaman seperti
BloodPressureRecord,HeartRateRecord, dan rekaman tanda vital lainnya. - Membaca data tanda vital untuk ditampilkan, dianalisis, atau disinkronkan.
- Menggunakan batching 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 penting:
- Integrasikan Health Connect menggunakan dependensi yang sesuai.
- Buat instance
HealthConnectClient. - Pastikan aplikasi Anda menerapkan alur izin runtime berdasarkan Izin Kesehatan.
Konsep utama
Data vital di Health Connect diwakili oleh berbagai jenis data, yang masing-masing sesuai dengan pengukuran fisiologis tertentu. Tidak seperti sesi latihan fisik, vitalitas sering kali direkam sebagai data berbasis titik waktu atau interval.
Jenis data vitalitas
Data vital diwakili oleh setiap jenis catatan. Jenis umum mencakup:
BloodPressureRecord: Menampilkan satu hasil pengukuran 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: Merepresentasikan satu pembacaan suhu tubuh, termasuk lokasi pengukuran.BloodGlucoseRecord: Menampilkan satu hasil bacaan glukosa darah, termasuk hubungan dengan makanan dan sumber spesimen.OxygenSaturationRecord: Mewakili satu pembacaan saturasi oksigen darah.RespiratoryRateRecord: Menampilkan satu pengukuran laju pernapasan.
Untuk mengetahui daftar lengkap jenis data, lihat Jenis data Health Connect.
Pertimbangan pengembangan
Data 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 vital. Izin umum untuk tanda vital mencakup tekanan darah, detak jantung, suhu tubuh, glukosa darah, saturasi oksigen, dan laju pernapasan. Hal tersebut meliputi:
- 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. - Gula Darah: Izin baca dan tulis untuk
BloodGlucoseRecord. - Saturasi Oksigen: Izin baca dan tulis untuk
OxygenSaturationRecord. - Laju Pernapasan: Izin baca dan tulis untuk
RespiratoryRateRecord.
Berikut 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.
// Create a set of permissions for required data types
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)
)
Gunakan 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.
// Create the permissions launcher
val requestPermissionActivityContract = PermissionController.createRequestPermissionResultContract()
val requestPermissions = registerForActivityResult(requestPermissionActivityContract) { granted ->
if (granted.containsAll(PERMISSIONS)) {
// Permissions successfully granted
} else {
// Lack of required permissions
}
}
suspend fun checkPermissionsAndRun(healthConnectClient: HealthConnectClient) {
val granted = healthConnectClient.permissionController.getGrantedPermissions()
if (granted.containsAll(PERMISSIONS)) {
// Permissions already granted; proceed with inserting or reading data
} else {
requestPermissions.launch(PERMISSIONS)
}
}
Karena pengguna dapat memberikan atau mencabut izin kapan saja, aplikasi Anda perlu memeriksa izin setiap kali sebelum menggunakannya dan menangani skenario saat izin hilang.
Untuk meminta izin, panggil fungsi checkPermissionsAndRun:
if (!granted.containsAll(PERMISSIONS)) {
requestPermissions.launch(PERMISSIONS)
// Check if required permissions are not granted, and return
}
// 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 penting biasanya ditulis sebagai catatan individual. Jika Anda menulis beberapa data sekaligus, seperti menyinkronkan dari sensor atau backend, gunakan batching.
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 yang 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 rekaman sekaligus secara 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 penting untuk menampilkan pengukuran, menganalisis tren, atau menyinkronkan data dengan server eksternal. Untuk membaca data penting, gunakan ReadRecordsRequest dengan
jenis data tertentu dan filter menurut rentang waktu.
Contoh membaca 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 vital dengan server backend, atau menjaga datastore aplikasi tetap terbaru dengan Health Connect, gunakan ChangeLogs. Dengan demikian, Anda dapat mengambil daftar data yang disisipkan, diperbarui, atau dihapus sejak titik 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 berikut untuk meningkatkan keandalan data dan pengalaman pengguna:
- Frekuensi penulisan dan pengelompokan: Untuk mengurangi overhead Input/Output dan
mempertahankan masa pakai baterai, kelompokkan titik data ke dalam satu panggilan
insertRecordsdengan batch hingga 1.000 rekaman, daripada menulis setiap titik satu per satu.- Pelacakan Langsung: Untuk pembaruan yang sering dari sensor (seperti alat pemantau glukosa berkelanjutan atau alat pemantau detak jantung), tulis data dalam batch pada interval hingga 15 menit untuk menyeimbangkan pembaruan real-time dengan efisiensi baterai.
- 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 ID Klien Saat membuat catatan, tetapkan
metadata.clientRecordId. Health Connect menggunakan ini untuk mengidentifikasi catatan 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 = 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, metadata = Metadata( // Use a unique ID from your own database clientRecordId = "bp_20240101_user123" ) )
Periksa data yang ada: Sebelum menyinkronkan data, kueri Health Connect untuk melihat apakah data dari aplikasi Anda sudah ada dalam rentang waktu sinkronisasi, 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, seperti "Untuk memantau tren tekanan darah Anda dan memberikan insight".Menyelaraskan stempel waktu dengan pengukuran: Verifikasi stempel waktu rekaman secara akurat mencerminkan waktu pengukuran dilakukan. Untuk data interval seperti
HeartRateRecord, pastikanstartTimedanendTimesudah benar.
Pengujian
Untuk memverifikasi kebenaran data dan pengalaman pengguna yang berkualitas tinggi, ikuti strategi pengujian berikut dan lihat dokumentasi Uji kasus penggunaan teratas resmi.
Alat verifikasi
- Toolbox Health Connect: Gunakan aplikasi pendamping ini untuk memeriksa catatan secara manual, menghapus data pengujian, dan menyimulasikan perubahan pada database. Cara ini adalah cara terbaik untuk memverifikasi bahwa catatan 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
Penerapan metrik penting biasanya mencakup:
| Komponen | Mengelola |
|---|---|
| Pengontrol tanda vital | Pembacaan Sensor/Input Logika pengelompokan |
| Lapisan repositori (membungkus 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 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. |
| Record 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 | Satuan 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 tipe data untuk mengetahui rentang dan unit yang valid. |
Langkah-langkah umum proses penelusuran kesalahan
| Periksa status izin. | Selalu panggil getPermissionStatus() sebelum mencoba operasi baca atau tulis. Pengguna dapat mencabut izin di setelan sistem kapan saja. |