این راهنما با Health Connect نسخه 1.1.0-beta02 سازگار است.
برای نوشتن داده های پزشکی با استفاده از Personal Health Records (PHR) در Health Connect، این مراحل را دنبال کنید:
- در دسترس بودن ویژگی را بررسی کنید
- درخواست مجوز نوشتن
- ایجاد یک منبع داده (
MedicalDataSource
) - نوشتن یک منبع پزشکی (
MedicalResource
)
در دسترس بودن ویژگی
برای تعیین اینکه آیا دستگاه کاربر از PHR در Health Connect پشتیبانی میکند یا خیر، در دسترس بودن FEATURE_PERSONAL_HEALTH_RECORD
را در مشتری بررسی کنید:
if (healthConnectClient
.features
.getFeatureStatus(
HealthConnectFeatures.FEATURE_PERSONAL_HEALTH_RECORD
) == HealthConnectFeatures.FEATURE_STATUS_AVAILABLE) {
// Feature is available
} else {
// Feature isn't available
}
برای اطلاعات بیشتر به بررسی در دسترس بودن ویژگی مراجعه کنید.
مجوزهای مورد نیاز
نوشتن داده های پزشکی با مجوز زیر محافظت می شود:
-
android.permission.health.WRITE_MEDICAL_DATA
این مجوزها را در کنسول Play برای برنامه خود و همچنین در مانیفست برنامه خود اعلام کنید:
<application>
<uses-permission
android:name="android.permission.health.WRITE_MEDICAL_DATA" />
</application>
شما مسئول اعلام همه مجوزهای مناسبی هستید که قصد دارید در دستگاه ها و برنامه های خود استفاده کنید. همچنین باید بررسی کنید که هر مجوز قبل از استفاده توسط کاربر اعطا شده باشد.
درخواست مجوز از کاربر
پس از ایجاد یک نمونه مشتری، برنامه شما باید از کاربر مجوز درخواست کند. کاربران باید در هر زمانی اجازه دهند یا رد کنند.
برای انجام این کار، مجموعه ای از مجوزها را برای انواع داده های مورد نیاز ایجاد کنید. مطمئن شوید که ابتدا مجوزهای مجموعه در مانیفست اندروید شما اعلام شده باشد.
// 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
)
از getGrantedPermissions
استفاده کنید تا ببینید آیا برنامه شما قبلاً مجوزهای لازم را دارد یا خیر. اگر نه، از createRequestPermissionResultContract
برای درخواست آن مجوزها استفاده کنید. این صفحه مجوزهای 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)
}
}
از آنجایی که کاربران میتوانند در هر زمانی مجوزها را اعطا یا لغو کنند، برنامه شما باید بهطور دورهای مجوزهای اعطا شده را بررسی کند و سناریوهایی را که در آن مجوز از دست میرود رسیدگی کند.
منابع داده
MedicalDataSource
در Health Connect منبعی از دادههای رو به رو کاربر را نشان میدهد، مانند یک سازمان مراقبتهای بهداشتی، یک بیمارستان یا یک API.
سوابق پزشکی ذخیره شده در Health Connect در یک MedicalDataSource
سازماندهی شده است. این اجازه می دهد تا سوابق پزشکی را برای یک فرد که از منابع مختلف مانند API ها یا سیستم های مراقبت های بهداشتی آمده است، جدا کنید.
اگر همه سوابق از یک منبع منشا می گیرند، یک برنامه نوشتن فقط باید یک MedicalDataSource
ایجاد کند. اگر سوابق از چندین منبع نشات میگیرند، اگر این دادهها با هم تطبیق داده شوند و همه رکوردها ترکیبی منحصربهفرد از نوع منبع FHIR و شناسه منبع FHIR داشته باشند، یک برنامه همچنان میتواند یک MedicalDataSource
ایجاد کند. در غیر این صورت، یک MedicalDataSource
باید برای هر منبع داده ایجاد شود.
همه سوابق پزشکی باید با یک MedicalDataSource
مرتبط باشند، بنابراین باید قبل از نوشتن منابع ایجاد شود.
ویژگی های MedicalDataSource
:
- نام نمایشی (الزامی) - نام نمایشی کاربر برای منبع داده که به طور منحصر به فرد در هر برنامه نوشتن شناسایی می شود.
FHIR Base URI (الزامی) - برای دادههایی که از سرور FHIR میآیند، این باید URL پایه FHIR باشد (به عنوان مثال،
https://example.com/fhir/
). چندین منبع داده را می توان با همان URL پایه FHIR مرتبط کرد.اگر دادهها توسط برنامهای بدون نشانی وب FHIR تولید میشوند، این باید یک URI منحصربهفرد و قابل فهم باشد که توسط برنامه تعریف شده است (مثلاً
myapp://..
) که به منبع داده اشاره میکند.به عنوان مثال، اگر یک برنامه مشتری از پیوند عمیق پشتیبانی می کند، این پیوند عمیق می تواند به عنوان URI پایه FHIR استفاده شود. حداکثر طول URI 2000 کاراکتر است.
نام بسته (به طور خودکار پر می شود) - برنامه ای که داده ها را می نویسد.
نسخه FHIR (الزامی) - نسخه FHIR. باید نسخه پشتیبانی شده باشد.
یک رکورد MedicalDataSource ایجاد کنید
برای هر سازمان یا نهادی که برنامه شما به آن مرتبط است، یک رکورد ایجاد کنید.
// 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 را حذف کنید
مثال قبلی یک id
توسط سیستم در هنگام ایجاد را برمی گرداند. اگر نیاز به حذف رکورد MedicalDataSource
دارید، به همان id
مراجعه کنید:
// Delete the `MedicalDataSource` that has the specified `id`
healthConnectClient.deleteMedicalDataSourceWithData(medicalDataSource.id)
منابع پزشکی
یک MedicalResource
در Health Connect نشان دهنده یک منبع FHIR (که حاوی یک پرونده پزشکی است) همراه با ابرداده است.
ویژگی های MedicalResource
:
- DataSourceId (الزامی) - منبع داده همانطور که برای یک
MedicalDataSource
توضیح داده شده است. - نسخه FHIR (الزامی) - نسخه FHIR. باید نسخه پشتیبانی شده باشد.
- منبع FHIR (الزامی) نمونه منبع FHIR کدگذاری شده با JSON.
- نوع منبع پزشکی (به طور خودکار پر می شود) - دسته کاربر رو به روی منبع، نگاشت به مجوزهای روبرو.
منابع FHIR را در JSON آماده کنید
قبل از نوشتن منابع پزشکی برای Health Connect، سوابق منابع FHIR خود را در JSON آماده کنید. هر JSON را برای درج به عنوان منبع پزشکی در متغیر خودش ذخیره کنید.
اگر در مورد فرمت FHIR JSON به کمک نیاز دارید، به نمونه داده های ارائه شده توسط سازمان HL7 مراجعه کنید.
سوابق پزشکی منابع را درج یا به روز کنید
از UpsertMedicalResourceRequest
برای درج یا بهروزرسانی رکوردهای MedicalResource
موجود برای یک 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
)
)
)
منبع FHIR مثال
در مثال قبلی، متغیر medicationJsonToInsert
یک رشته معتبر FHIR JSON را نشان میدهد.
در اینجا نمونهای از شکل ظاهری آن JSON با استفاده از AllergyIntolerance به عنوان نوع منبع FHIR است که به نوع منبع پزشکی FHIR_RESOURCE_TYPE_ALLERGY_INTOLERANCE
در 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"
}
...
}
یک رکورد پزشکی منابع را حذف کنید
سوابق MedicalResource
ممکن است با شناسه حذف شوند:
// 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
)
}
)
یا می توان آنها را توسط 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)
)
)