برای خواندن دادههای پزشکی با استفاده از پروندههای پزشکی در 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_INTOLERANCES
-
android.permission.health.READ_MEDICAL_DATA_CONDITIONS
-
android.permission.health.READ_MEDICAL_DATA_LABORATORY_RESULTS
-
android.permission.health.READ_MEDICAL_DATA_MEDICATIONS
-
android.permission.health.READ_MEDICAL_DATA_PERSONAL_DETAILS
-
android.permission.health.READ_MEDICAL_DATA_PRACTITIONER_DETAILS
-
android.permission.health.READ_MEDICAL_DATA_PREGNANCY
-
android.permission.health.READ_MEDICAL_DATA_PROCEDURES
-
android.permission.health.READ_MEDICAL_DATA_SOCIAL_HISTORY
-
android.permission.health.READ_MEDICAL_DATA_VACCINES
-
android.permission.health.READ_MEDICAL_DATA_VISITS
-
android.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>
شما مسئول اعلام تمام مجوزهای مناسبی هستید که قصد دارید در دستگاهها و برنامههای خود استفاده کنید. همچنین باید قبل از استفاده، بررسی کنید که هر مجوز توسط کاربر اعطا شده باشد.
درخواست مجوز از کاربر
پس از ایجاد یک نمونه کلاینت، برنامه شما باید از کاربر درخواست مجوز کند. کاربران باید بتوانند در هر زمانی مجوزها را اعطا یا رد کنند.
برای انجام این کار، مجموعهای از مجوزها را برای انواع دادههای مورد نیاز ایجاد کنید. مطمئن شوید که مجوزهای موجود در مجموعه ابتدا در مانیفست اندروید شما تعریف شدهاند.
// 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
یک درخواست get را با مشخص کردن 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.
// All `MedicalResource`s in the given `MedicalDataSource`s and of given `medicalResourceType`
// will be retrieved.
val initialRequest: ReadMedicalResourcesRequest =
ReadMedicalResourcesInitialRequest(
MEDICAL_RESOURCE_TYPE_LABORATORY_RESULTS,
setOf(medicalDataSource.id),
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 بر اساس نام بسته
برای درخواست بر اساس نام بسته (برنامه) از 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))