Bu kılavuz, Health Connect'in 1.1.0-beta02 sürümüyle uyumludur.
Health Connect'teki Tıbbi Kayıtlar'ı kullanarak tıbbi veri yazmak için aşağıdaki adımları uygulayın:
- Özelliklerin kullanılabilirlik durumunu kontrol etme
- Yazma izni isteme
- Veri kaynağı oluşturma (
MedicalDataSource
) - Tıbbi kaynak yazma (
MedicalResource
)
Özellik kullanılabilirliği
Kullanıcının cihazının Health Connect'te Sağlık Kayıtları'nı destekleyip desteklemediğini belirlemek için istemcideFEATURE_PERSONAL_HEALTH_RECORD
'nın kullanılabilirliğini kontrol edin:
if (healthConnectClient
.features
.getFeatureStatus(
HealthConnectFeatures.FEATURE_PERSONAL_HEALTH_RECORD
) == HealthConnectFeatures.FEATURE_STATUS_AVAILABLE) {
// Feature is available
} else {
// Feature isn't available
}
Daha fazla bilgi için Özelliklerin kullanılabilirliğini kontrol etme başlıklı makaleyi inceleyin.
Gerekli izinler
Tıbbi verilerin yazılması aşağıdaki izinle korunur:
android.permission.health.WRITE_MEDICAL_DATA
Uygulamanızın manifest dosyasının yanı sıra Play Console'da da bu izinleri beyan edin:
<application>
<uses-permission
android:name="android.permission.health.WRITE_MEDICAL_DATA" />
</application>
Cihazlarınızda ve uygulamalarınızda kullanmayı planladığınız tüm uygun izinleri beyan etmek sizin sorumluluğunuzdadır. Ayrıca, her iznin kullanılmadan önce kullanıcı tarafından verildiğinden de emin olmalısınız.
Kullanıcıdan izin isteme
İstemci örneği oluşturduktan sonra uygulamanızın kullanıcıdan izin istemesi gerekir. Kullanıcıların izinleri istedikleri zaman vermesine veya reddetmesine izin verilmelidir.
Bunun için gerekli veri türleri için bir izin grubu oluşturun. Gruptaki izinlerin önce Android manifestinizde tanımlandığından emin olun.
// 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
)
Uygulamanıza gerekli izinlerin verilip verilmediğini görmek için getGrantedPermissions
aracını kullanın. Aksi takdirde, bu izinleri istemek için createRequestPermissionResultContract
simgesini kullanın. Bu işlem, Health Connect izinleri ekranını gösterir.
// 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)
}
}
Kullanıcılar izinleri istedikleri zaman verebilir veya iptal edebilir. Bu nedenle, uygulamanızın verilen izinleri düzenli olarak kontrol etmesi ve izinlerin kaybedildiği senaryoları yönetmesi gerekir.
Veri Kaynakları
Health Connect'teki MedicalDataSource
, sağlık kuruluşu, hastane veya API gibi kullanıcıya yönelik bir veri kaynağını temsil eder.
Health Connect'te depolanan tıbbi kayıtlar MedicalDataSource
olarak düzenlenir. Bu sayede, aynı kişiye ait olup API'ler veya sağlık sistemleri gibi farklı kaynaklardan gelen tıbbi kayıtlar ayrılabilir.
Tüm kayıtlar aynı kaynaktan geliyorsa yazma uygulamasının yalnızca bir MedicalDataSource
oluşturması gerekir. Kayıtlar birden fazla kaynaktan geliyorsa uygulama, bu veriler mutabakatlaştırılırsa ve tüm kayıtlar benzersiz bir FHIR kaynak türü ve FHIR kaynak kimliği kombinasyonuna sahipse tek bir MedicalDataSource
oluşturabilir.
Aksi takdirde, her veri kaynağı için bir MedicalDataSource
oluşturulmalıdır.
Tüm tıbbi kayıtlar bir MedicalDataSource
ile ilişkilendirilmelidir. Bu nedenle, kaynaklar yazılmadan önce oluşturulmalıdır.
MedicalDataSource
öğesinin özellikleri:
- Görünen Ad (zorunlu): Veri kaynağının kullanıcıya yönelik görünen adı. Yazma uygulamasına göre benzersiz şekilde tanımlanır.
FHIR Base URI (gerekli): Bir FHIR sunucusundan gelen veriler için bu, FHIR temel URL'si olmalıdır (örneğin,
https://example.com/fhir/
). Birden fazla veri kaynağı aynı FHIR temel URL'siyle ilişkilendirilebilir.Veriler, FHIR URL'si olmayan bir uygulama tarafından oluşturuluyorsa bu, uygulamanın tanımladığı benzersiz ve anlaşılır bir URI (ör.
myapp://..
) olmalı ve verilerin kaynağını göstermelidir.Örneğin, bir istemci uygulaması derin bağlantıyı destekliyorsa bu derin bağlantı, FHIR Base URI olarak kullanılabilir. URI için maksimum uzunluk 2.000 karakterdir.
Paket adı (otomatik olarak doldurulur): Verileri yazan uygulama.
FHIR Sürümü (zorunlu): FHIR sürümü. Desteklenen bir sürüm olmalıdır.
MedicalDataSource kaydı oluşturma
Uygulamanızın bağlı olduğu her sağlık kuruluşu veya tüzel kişi için bir kayıt oluşturun.
// 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)
)
)
MedicalDataSource kaydını silme
Önceki örnek, oluşturma sırasında sistem tarafından bir id
döndürür. MedicalDataSource
kaydını silmeniz gerekirse aynı id
değerine referans verin:
// Delete the `MedicalDataSource` that has the specified `id`
healthConnectClient.deleteMedicalDataSourceWithData(medicalDataSource.id)
Tıbbi kaynaklar
Health Connect'teki MedicalResource
, meta verilerle birlikte bir FHIR kaynağını (tıbbi kayıt içeren) temsil eder.
MedicalResource
öğesinin özellikleri:
- DataSourceId (zorunlu):
MedicalDataSource
için açıklandığı şekildeki veri kaynağı. - FHIR Sürümü (zorunlu): FHIR sürümü. Desteklenen bir sürüm olmalıdır.
- FHIR kaynağı (zorunlu): JSON biçiminde kodlanmış FHIR kaynağı örneği.
- Tıbbi Kaynak türü (otomatik olarak doldurulur): Kaynağın, kullanıcıya yönelik izinlerle eşlenen kullanıcıya yönelik kategorisi.
JSON biçiminde FHIR kaynakları hazırlama
Tıbbi kaynakları Health Connect'e yazmadan önce FHIR kaynak kayıtlarınızı JSON biçiminde hazırlayın. Her JSON'u tıbbi kaynak olarak eklemek için kendi değişkeninde saklayın.
FHIR JSON biçimiyle ilgili yardıma ihtiyacınız varsa HL7 kuruluşu tarafından sağlanan örnek verilere bakın.
MedicalResource kayıtlarını ekleme veya güncelleme
UpsertMedicalResourceRequest
kullanarak MedicalDataSource
için yeni kayıtlar ekleyin veya mevcut kayıtları güncelleyin:
MedicalResource
// 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
)
)
)
Örnek FHIR kaynağı
Önceki örnekte, medicationJsonToInsert
değişkeni geçerli bir FHIR JSON dizesini temsil ediyordu.
Aşağıda, FHIR kaynak türü olarak AllergyIntolerance'ın kullanıldığı ve Tıbbi Kayıtlar'daki FHIR_RESOURCE_TYPE_ALLERGY_INTOLERANCE
Tıbbi Kaynak Türü ile eşlenecek JSON'ın nasıl görünebileceğine dair bir örnek verilmiştir:
{
"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"
}
...
}
MedicalResource kaydını silme
MedicalResource
kayıtları kimliğe göre silinebilir:
// 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
)
}
)
Alternatif olarak, medicalResourceType
tarafından silinebilirler:
// 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)
)
)