این راهنما با Health Connect نسخه 1.1.0-beta02 یا بالاتر سازگار است.
برای خواندن دادههای پزشکی بااستفاده از «سوابق پزشکی» در Health Connect، این مراحل را دنبال کنید:
- دردسترس بودن ویژگی را بررسی کنید.
- درخواست اجازههای خواندن.
- دادهها را بخواند، مثلاً سوابق
MedicalResourceیا جزئیاتMedicalDataSource.
دردسترس بودن ویژگی
برای تعیین اینکه آیا دستگاه کاربر از «پروندههای پزشکی» در 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.READ_MEDICAL_DATA_ALLERGIES_INTOLERANCESandroid.permission.health.READ_MEDICAL_DATA_CONDITIONSandroid.permission.health.READ_MEDICAL_DATA_LABORATORY_RESULTSandroid.permission.health.READ_MEDICAL_DATA_MEDICATIONSandroid.permission.health.READ_MEDICAL_DATA_PERSONAL_DETAILSandroid.permission.health.READ_MEDICAL_DATA_PRACTITIONER_DETAILSandroid.permission.health.READ_MEDICAL_DATA_PREGNANCYandroid.permission.health.READ_MEDICAL_DATA_PROCEDURESandroid.permission.health.READ_MEDICAL_DATA_SOCIAL_HISTORYandroid.permission.health.READ_MEDICAL_DATA_VACCINESandroid.permission.health.READ_MEDICAL_DATA_VISITSandroid.permission.health.READ_MEDICAL_DATA_VITAL_SIGNS
این اجازهها را در «کنسول Play» برای برنامهتان و همچنین در مانیفست برنامهتان اعلام کنید:
<application>
<uses-permission
android:name="android.permission.health.READ_MEDICAL_DATA_ALLERGIES_INTOLERANCES" />
<uses-permission
android:name="android.permission.health.READ_MEDICAL_DATA_CONDITIONS" />
...
</application>
مسئولیت اعلام همه اجازههای مناسبی که قصد دارید در دستگاهها و برنامههایتان استفاده کنید برعهده شما است. همچنین باید بررسی کنید که هر اجازه قبلاز استفاده توسط کاربر اعطا شده باشد.
درخواست اجازهها از کاربر
پساز ایجاد نمونه مشتری، برنامهتان باید از کاربر درخواست اجازه کند. کاربران باید بتوانند در هرزمانی اجازهها را اعطا یا رد کنند.
برای انجام این کار، مجموعهای از اجازهها را برای انواع دادههای موردنیاز ایجاد کنید. مطمئن شوید که اجازههای موجود در مجموعه ابتدا در مانیفست Android شما اعلام شده باشد.
// Create a set of permissions for required data types
import androidx.health.connect.client.permission.HealthPermission.Companion.PERMISSION_READ_MEDICAL_DATA_ALLERGIES_INTOLERANCES
import androidx.health.connect.client.permission.HealthPermission.Companion.PERMISSION_READ_MEDICAL_DATA_CONDITIONS
import androidx.health.connect.client.permission.HealthPermission.Companion.PERMISSION_READ_MEDICAL_DATA_LABORATORY_RESULTS
import androidx.health.connect.client.permission.HealthPermission.Companion.PERMISSION_READ_MEDICAL_DATA_MEDICATIONS
import androidx.health.connect.client.permission.HealthPermission.Companion.PERMISSION_READ_MEDICAL_DATA_PERSONAL_DETAILS
import androidx.health.connect.client.permission.HealthPermission.Companion.PERMISSION_READ_MEDICAL_DATA_PRACTITIONER_DETAILS
import androidx.health.connect.client.permission.HealthPermission.Companion.PERMISSION_READ_MEDICAL_DATA_PREGNANCY
import androidx.health.connect.client.permission.HealthPermission.Companion.PERMISSION_READ_MEDICAL_DATA_PROCEDURES
import androidx.health.connect.client.permission.HealthPermission.Companion.PERMISSION_READ_MEDICAL_DATA_SOCIAL_HISTORY
import androidx.health.connect.client.permission.HealthPermission.Companion.PERMISSION_READ_MEDICAL_DATA_VACCINES
import androidx.health.connect.client.permission.HealthPermission.Companion.PERMISSION_READ_MEDICAL_DATA_VISITS
import androidx.health.connect.client.permission.HealthPermission.Companion.PERMISSION_READ_MEDICAL_DATA_VITAL_SIGNS
val PERMISSIONS =
setOf(
PERMISSION_READ_MEDICAL_DATA_ALLERGIES_INTOLERANCES
PERMISSION_READ_MEDICAL_DATA_CONDITIONS
PERMISSION_READ_MEDICAL_DATA_LABORATORY_RESULTS
PERMISSION_READ_MEDICAL_DATA_MEDICATIONS
PERMISSION_READ_MEDICAL_DATA_PERSONAL_DETAILS
PERMISSION_READ_MEDICAL_DATA_PRACTITIONER_DETAILS
PERMISSION_READ_MEDICAL_DATA_PREGNANCY
PERMISSION_READ_MEDICAL_DATA_PROCEDURES
PERMISSION_READ_MEDICAL_DATA_SOCIAL_HISTORY
PERMISSION_READ_MEDICAL_DATA_VACCINES
PERMISSION_READ_MEDICAL_DATA_VISITS
PERMISSION_READ_MEDICAL_DATA_VITAL_SIGNS
)
از 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)
}
}
چون کاربران میتوانند در هرزمانی اجازهها را اعطا یا لغو کنند، برنامهتان باید هر بار قبلاز استفاده از اجازهها آنها را بررسی کند و سناریوهایی را که اجازه ازدست رفته است مدیریت کند.
منابع پزشکی
میتوانید هر منبع پزشکی (MedicalResource)
نوشتهشده در Health Connect برای کاربر را بخوانید، ازجمله منابعی که توسط برنامههای دیگر اضافه شدهاند.
دریافت سوابق MedicalResource
با مشخص کردن medicalResourceType، درخواست دریافت را فیلتر کنید. حتماً از درخواستهای صفحهبندیشده استفاده کنید و به محدودیت نرخ توجه داشته باشید.
// Read `MedicalResource`s back from the `MedicalDataSource`
// Read 100 resources / page. See `pageSize` doc for defaults and limits.
val pageSize = 100
// Prepare the initial read request.
// If `medicalDataSourceIds` is empty, all `MedicalResource`s of the given `medicalResourceType`
// across all `MedicalDataSource`s will be retrieved.
val initialRequest: ReadMedicalResourcesRequest =
ReadMedicalResourcesInitialRequest(
MEDICAL_RESOURCE_TYPE_LABORATORY_RESULTS,
medicalDataSourceIds = emptySet(),
pageSize = pageSize,
)
// Continue reading pages until all `MedicalResource`s are read
var pageToken: String? = null
do {
// Prepare paged request if needed
val request: ReadMedicalResourcesRequest =
if (pageToken == null) initialRequest
else ReadMedicalResourcesPageRequest(pageToken, pageSize = pageSize)
// Read `MedicalResource`s
val response: ReadMedicalResourcesResponse =
healthConnectClient.readMedicalResources(request)
// Process `MedicalResource`s
val resources: List<MedicalResource> = response.medicalResources
// Advance to next page
pageToken = response.nextPageToken
} while (pageToken != null)
دریافت سوابق MedicalResource با شناسه
همچنین میتوانید MedicalResource را بااستفاده از شناسه بازیابی کنید:
// Retrieve `fhirResourceType` type `MedicalResource`s with the specified `id`s from the
// provided `MedicalDataSource`
val retrievedMedicalResources: List<MedicalResource> =
healthConnectClient.readMedicalResources(
medicalResources.map { medicalResource: MedicalResource ->
MedicalResourceId(
dataSourceId = medicalDataSource.id,
fhirResourceType = medicalResource.id.fhirResourceType,
fhirResourceId = medicalResource.id.fhirResourceId
)
}
)
منابع دادهها
میتوانید هر منبع دادهای (MedicalDataSource) را که برای کاربر در Health Connect نوشته شده است بخوانید، ازجمله منابعی که توسط برنامههای دیگر اضافه شدهاند.
MedicalDataSource نشاندهنده منبع سوابق پزشکی است، مثل بیمارستان یا کلینیک. این کار به شما کمک میکند تا منشأ سوابق پزشکی خاص را شناسایی کنید، که برای فیلتر کردن دادهها یا نمایش اطلاعات منبع به کاربر مفید است.
دریافت کردن سابقه MedicalDataSource براساس نام بسته
از GetMedicalDataSourcesRequest برای درخواست براساس نام بسته (برنامه) استفاده کنید:
// Retrieve all `MedicalDataSource`s created by any of the specified package names
// Package names may be found in other `MedicalDataSource`s or from arbitrary input
val medicalDataSources: List<MedicalDataSource> =
healthConnectClient.getMedicalDataSources(
GetMedicalDataSourcesRequest(listOf(medicalDataSource.packageName, anotherPackageName))
)
دریافت سابقه MedicalDataSource با شناسه
یا اگر id را میدانید، بااستفاده از آن درخواست کنید:
// Retrieve all `MedicalDataSource` with `id` matching any of the given ids
val medicalDataSources: List<MedicalDataSource> =
healthConnectClient.getMedicalDataSources(listOf(medicalDataSource.id, anotherId))