این راهنما با Health Connect نسخه 1.1.0-beta02 سازگار است.
برای خواندن دادههای پزشکی با استفاده از سوابق سلامت شخصی (PHR) در Health Connect، این مراحل را دنبال کنید:
- در دسترس بودن ویژگی را بررسی کنید.
- درخواست مجوز خواندن
- سوابق پزشکی (
MedicalResource
) را بخوانید. - منابع داده را بخوانید (
MedicalDataSource
).
در دسترس بودن ویژگی
برای تعیین اینکه آیا دستگاه کاربر از 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.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 را برای کاربر بخوانید، از جمله منابعی که توسط برنامههای دیگر اضافه شدهاند.
سوابق منابع پزشکی را دریافت کنید
یک درخواست دریافت را با مشخص کردن 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
با استفاده از یک شناسه بازیابی کنید:
// 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))