Panduan ini kompatibel dengan Health Connect versi 1.1.0-beta02.
Untuk menulis data medis menggunakan Catatan Medis di Health Connect, ikuti langkah-langkah berikut:
- Memeriksa ketersediaan fitur
- Meminta izin tulis
- Membuat sumber data (
MedicalDataSource
) - Menulis referensi medis (
MedicalResource
)
Ketersediaan fitur
Untuk menentukan apakah perangkat pengguna mendukung Rekam Medis di Health Connect, periksa ketersediaanFEATURE_PERSONAL_HEALTH_RECORD
di klien:
if (healthConnectClient
.features
.getFeatureStatus(
HealthConnectFeatures.FEATURE_PERSONAL_HEALTH_RECORD
) == HealthConnectFeatures.FEATURE_STATUS_AVAILABLE) {
// Feature is available
} else {
// Feature isn't available
}
Lihat Memeriksa ketersediaan fitur untuk mempelajari lebih lanjut.
Izin yang diperlukan
Penulisan data medis dilindungi oleh izin berikut:
android.permission.health.WRITE_MEDICAL_DATA
Deklarasikan izin ini di Konsol Play untuk aplikasi Anda, serta di manifes aplikasi Anda:
<application>
<uses-permission
android:name="android.permission.health.WRITE_MEDICAL_DATA" />
</application>
Anda bertanggung jawab untuk menyatakan semua izin yang sesuai yang ingin Anda gunakan di perangkat dan aplikasi Anda. Anda juga harus memeriksa bahwa setiap izin telah diberikan oleh pengguna sebelum digunakan.
Meminta izin dari pengguna
Setelah membuat instance klien, aplikasi Anda perlu meminta izin dari pengguna. Pengguna harus diizinkan untuk memberikan atau menolak izin setiap saat.
Untuk melakukannya, buat kumpulan izin untuk jenis data yang diperlukan. Pastikan izin dalam kumpulan dinyatakan dalam manifes Android Anda terlebih dahulu.
// Create a set of permissions for required data types
import androidx.health.connect.client.permission.HealthPermission.Companion.PERMISSION_WRITE_MEDICAL_DATA
val PERMISSIONS =
setOf(
PERMISSION_WRITE_MEDICAL_DATA
)
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 harus memeriksa izin yang diberikan secara berkala dan menangani skenario saat izin tersebut hilang.
Sumber Data
MedicalDataSource
di Health Connect merepresentasikan sumber data yang ditampilkan kepada pengguna, seperti organisasi kesehatan, rumah sakit, atau API.
Catatan medis yang disimpan di Health Connect disusun ke dalam
MedicalDataSource
. Hal ini memungkinkan pemisahan catatan medis untuk individu yang sama yang berasal dari sumber yang berbeda seperti API atau sistem kesehatan.
Jika semua data berasal dari sumber yang sama, aplikasi penulisan hanya perlu membuat satu MedicalDataSource
. Jika data berasal dari beberapa sumber, aplikasi masih dapat membuat satu MedicalDataSource
jika data tersebut telah disesuaikan dan semua data memiliki kombinasi unik dari jenis resource FHIR dan ID resource FHIR.
Jika tidak, MedicalDataSource
harus dibuat untuk setiap sumber data.
Semua catatan medis harus dikaitkan dengan MedicalDataSource
, jadi MedicalDataSource
ini harus
dibuat sebelum menulis resource.
Properti MedicalDataSource
:
- Nama Tampilan (wajib) - Nama tampilan yang terlihat oleh pengguna untuk sumber data, yang diidentifikasi secara unik per aplikasi penulisan.
URI Dasar FHIR (wajib) - Untuk data yang berasal dari server FHIR, ini harus berupa URL dasar FHIR (misalnya,
https://example.com/fhir/
). Beberapa sumber data dapat dikaitkan dengan URL dasar FHIR yang sama.Jika data dibuat oleh aplikasi tanpa URL FHIR, ini harus berupa URI unik dan mudah dipahami yang ditentukan oleh aplikasi (misalnya,
myapp://..
) yang mengarah ke sumber data.Sebagai contoh, jika aplikasi klien mendukung deep linking, deep link ini dapat digunakan sebagai FHIR Base URI. Panjang maksimum untuk URI adalah 2.000 karakter.
Nama paket (diisi secara otomatis) - Aplikasi yang menulis data.
Versi FHIR (wajib) - Versi FHIR. Harus berupa versi yang didukung.
Membuat catatan MedicalDataSource
Buat data untuk setiap organisasi atau entitas layanan kesehatan yang ditautkan ke aplikasi Anda.
// Create a `MedicalDataSource`
// Note that `displayName` must be unique across `MedicalDataSource`s
// Each `MedicalDataSource` is assigned an `id` by the system on creation
val medicalDataSource: MedicalDataSource =
healthConnectClient.createMedicalDataSource(
CreateMedicalDataSourceRequest(
fhirBaseUri = Uri.parse("https://fhir.com/oauth/api/FHIR/R4/"),
displayName = "Test Data Source",
fhirVersion = FhirVersion(4, 0, 1)
)
)
Menghapus catatan MedicalDataSource
Contoh sebelumnya menampilkan id
oleh sistem saat pembuatan. Jika Anda perlu menghapus catatan MedicalDataSource
, rujuk id
yang sama:
// Delete the `MedicalDataSource` that has the specified `id`
healthConnectClient.deleteMedicalDataSourceWithData(medicalDataSource.id)
Sumber daya medis
MedicalResource
di Health Connect merepresentasikan resource FHIR (yang berisi catatan medis), beserta metadata.
Properti MedicalResource
:
- DataSourceId (wajib) - Sumber data seperti yang dijelaskan untuk
MedicalDataSource
. - Versi FHIR (wajib) - Versi FHIR. Harus berupa versi yang didukung.
- Resource FHIR (wajib) Instance resource FHIR yang dienkode JSON.
- Jenis Resource Medis (diisi otomatis) - Kategori yang ditampilkan kepada pengguna dari resource, yang dipetakan ke izin yang ditampilkan kepada pengguna.
Menyiapkan resource FHIR dalam JSON
Sebelum menulis resource medis ke Health Connect, siapkan catatan resource FHIR Anda dalam JSON. Simpan setiap JSON dalam variabelnya sendiri untuk disisipkan sebagai sumber daya medis.
Jika Anda memerlukan bantuan terkait format JSON FHIR, lihat contoh data yang disediakan oleh organisasi HL7.
Menyisipkan atau memperbarui data MedicalResource
Gunakan UpsertMedicalResourceRequest
untuk menyisipkan atau memperbarui data
MedicalResource
yang ada untuk MedicalDataSource
:
// Insert `MedicalResource`s into the `MedicalDataSource`
val medicalResources: List<MedicalResource> =
healthConnectClient.upsertMedicalResources(
listOf(
UpsertMedicalResourceRequest(
medicalDataSource.id,
medicalDataSource.fhirVersion,
medicationJsonToInsert // a valid FHIR json string
)
)
)
// Update `MedicalResource`s in the `MedicalDataSource`
val updatedMedicalResources: List<MedicalResource> =
healthConnectClient.upsertMedicalResources(
listOf(
UpsertMedicalResourceRequest(
medicalDataSource.id,
medicalDataSource.fhirVersion,
// a valid FHIR json string
// if this resource has the same type and ID as in `medicationJsonToInsert`,
// this `upsertMedicalResources()` call will update the previously inserted
// `MedicalResource`
updatedMedicationJsonToInsert
)
)
)
Contoh resource FHIR
Pada contoh sebelumnya, variabel medicationJsonToInsert
merepresentasikan string JSON FHIR yang valid.
Berikut adalah contoh tampilan JSON tersebut, menggunakan AllergyIntolerance sebagai jenis resource FHIR, yang akan dipetakan ke Jenis Resource Medis FHIR_RESOURCE_TYPE_ALLERGY_INTOLERANCE
di Catatan Medis:
{
"resourceType": "AllergyIntolerance",
"id": "allergyintolerance-1",
"criticality": "high",
"code": {
"coding": [
{
"system": "http://snomed.info/sct",
"code": "91936005",
"display": "Penicillin allergy"
}
],
"text": "Penicillin allergy"
},
"recordedDate": "2020-10-09T14:58:00+00:00",
"asserter": {
"reference": "Patient/patient-1"
},
"lastOccurrence": "2020-10-09",
"patient": {
"reference": "Patient/patient-1",
"display": "B., Alex"
}
...
}
Menghapus rekaman MedicalResource
MedicalResource
catatan dapat dihapus menurut ID:
// Delete `MedicalResource`s matching the specified `dataSourceId`, `type` and `fhirResourceId`
healthConnectClient.deleteMedicalResources(
medicalResources.map { medicalResource: MedicalResource ->
MedicalResourceId(
dataSourceId = medicalDataSource.id,
fhirResourceType = medicalResource.id.fhirResourceType,
fhirResourceId = medicalResource.id.fhirResourceId
)
}
)
Atau dapat dihapus oleh medicalResourceType
:
// Delete all `MedicalResource`s that are in any pair of provided `dataSourceIds` and
// `medicalResourceTypes`
healthConnectClient.deleteMedicalResources(
DeleteMedicalResourcesRequest(
dataSourceIds = setOf(medicalDataSource.id),
medicalResourceTypes = setOf(MEDICAL_RESOURCE_TYPE_MEDICATIONS)
)
)