قراءة البيانات الطبية

يتوافق هذا الدليل مع الإصدار 1.1.0-beta02 من Health Connect أو الإصدارات الأحدث.

لقراءة البيانات الطبية باستخدام ميزة "السجلّات الطبية" في 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 Console لتطبيقك، وكذلك في ملف بيان التطبيق:

<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

يمكنك فلترة طلب استرداد بيانات باستخدام 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.
// 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))