خواندن داده‌های پزشکی

این راهنما با Health Connect نسخه 1.1.0-beta02 یا بالاتر سازگار است.

برای خواندن داده‌های پزشکی بااستفاده از «سوابق پزشکی» در Health Connect، این مراحل را دنبال کنید:

  1. دردسترس بودن ویژگی را بررسی کنید.
  2. درخواست اجازه‌های خواندن.
  3. داده‌ها را بخواند، مثلاً سوابق 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>

مسئولیت اعلام همه اجازه‌های مناسبی که قصد دارید در دستگاه‌ها و برنامه‌هایتان استفاده کنید برعهده شما است. همچنین باید بررسی کنید که هر اجازه قبل‌از استفاده توسط کاربر اعطا شده باشد.

درخواست اجازه‌ها از کاربر

پس‌از ایجاد نمونه مشتری، برنامه‌تان باید از کاربر درخواست اجازه کند. کاربران باید بتوانند در هرزمانی اجازه‌ها را اعطا یا رد کنند.

برای انجام این کار، مجموعه‌ای از اجازه‌ها را برای انواع داده‌های موردنیاز ایجاد کنید. مطمئن شوید که اجازه‌های موجود در مجموعه ابتدا در مانیفست 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))