Panduan ini kompatibel dengan Health Connect versi 1.1.0-beta02.
Untuk menulis data medis menggunakan Rekam Medis Pribadi (PHR) 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 PHR di Health Connect,
periksa ketersediaan FEATURE_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
Menulis data medis dilindungi oleh izin berikut:
android.permission.health.WRITE_MEDICAL_DATA
Deklarasikan izin ini di Konsol Play untuk aplikasi Anda, serta dalam manifes aplikasi:
<application>
<uses-permission
android:name="android.permission.health.WRITE_MEDICAL_DATA" />
</application>
Anda bertanggung jawab untuk mendeklarasikan semua izin yang sesuai yang ingin Anda gunakan di perangkat dan aplikasi. Anda juga harus memeriksa apakah 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 dideklarasikan 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 mewakili
sumber data yang ditampilkan kepada pengguna, seperti organisasi layanan kesehatan, rumah sakit, atau
API.
Catatan medis yang disimpan di Health Connect diatur ke dalam
MedicalDataSource
. Hal ini memungkinkan pemisahan catatan medis untuk individu
yang sama yang berasal dari sumber yang berbeda seperti API atau sistem layanan 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 direkonsiliasi dan semua
data memiliki kombinasi unik dari jenis resource FHIR dan ID resource FHIR.
Jika tidak, MedicalDataSource
harus dibuat untuk setiap sumber data.
Semua rekam medis harus dikaitkan dengan MedicalDataSource
, sehingga harus
dibuat sebelum menulis resource.
Properti MedicalDataSource
:
- Nama Tampilan (wajib) - Nama tampilan yang ditampilkan kepada pengguna untuk sumber data, 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 dihasilkan oleh aplikasi tanpa URL FHIR, ini harus berupa URI unik dan mudah dipahami yang ditentukan oleh aplikasi (misalnya,
myapp://..
) yang mengarah ke sumber data.Misalnya, jika aplikasi klien mendukung deep linking, deep link ini dapat digunakan sebagai URI Dasar FHIR. 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 data MedicalDataSource
Buat data untuk setiap organisasi atau entitas layanan kesehatan yang ditautkan 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 data MedicalDataSource
Contoh sebelumnya menampilkan id
oleh sistem saat pembuatan. Jika Anda perlu menghapus data MedicalDataSource
, referensikan id
yang sama:
// Delete the `MedicalDataSource` that has the specified `id`
healthConnectClient.deleteMedicalDataSourceWithData(medicalDataSource.id)
Referensi medis
MedicalResource
di Health Connect mewakili resource
FHIR (yang berisi rekam 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 Medical Resource (diisi secara 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 data resource FHIR dalam JSON. Simpan setiap JSON dalam variabelnya sendiri untuk disisipkan sebagai resource 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 data MedicalResource
baru 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
mewakili
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 PHR:
{
"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 data MedicalResource
Data MedicalResource
dapat dihapus berdasarkan 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, file tersebut 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)
)
)