PHR - Jetpack SDK

इस सुविधा को कौन इस्तेमाल कर सकता है

यह पता करने के लिए कि उपयोगकर्ता के डिवाइस पर, 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.WRITE_MEDICAL_DATA
  • 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.WRITE_MEDICAL_DATA" />
  <uses-permission
android:name="android.permission.health.READ_MEDICAL_DATA_ALLERGIES_INTOLERANCES" />
...
</application>

आपको उन सभी अनुमतियों के बारे में बताना होगा जिनका इस्तेमाल आपको अपने डिवाइसों और ऐप्लिकेशन में करना है. आपको यह भी देखना चाहिए कि इस्तेमाल करने से पहले, उपयोगकर्ता ने हर अनुमति दी है या नहीं.

इस्तेमाल का उदाहरण

इस सेक्शन में, PHR की सुविधा के साथ आने वाले Jetpack SDK टूल के रिलीज़ के लिए, बुनियादी ऑपरेशन के कोड सैंपल दिए गए हैं. इनमें बदलाव हो सकता है.

MedicalDataSource रिकॉर्ड बनाना

// Create a `MedicalDataSource`
// Note that `displayName` must be unique across `MedicalDataSource`s
// Each `MedicalDataSource` is assigned an `id` by the system on creation
val medicalDataSource: MedicalDataSource =
    healthConnectClient.createMedicalDataSource(
        CreateMedicalDataSourceRequest(
            fhirBaseUri = Uri.parse("https://fhir.com/oauth/api/FHIR/R4/"),
            displayName = "Test Data Source",
            fhirVersion = FhirVersion(4, 0, 1)
        )
    )

MedicalDataSource का रिकॉर्ड मिटाना

पिछले उदाहरण में, सिस्टम ने एलिमेंट बनाने पर id दिखाया है. मिटाने के लिए, उसी id का रेफ़रंस दें:

// Delete the `MedicalDataSource` that has the specified `id`
healthConnectClient.deleteMedicalDataSourceWithData(medicalDataSource.id)

पैकेज के नाम के हिसाब से 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))

MedicalResource रिकॉर्ड डालना या अपडेट करना

MedicalDataSource के लिए नए MedicalResource रिकॉर्ड डालने या मौजूदा रिकॉर्ड अपडेट करने के लिए, UpsertMedicalResourceRequest का इस्तेमाल करें:

// Insert `MedicalResource`s into the `MedicalDataSource`
val medicalResources: List<MedicalResource> =
    healthConnectClient.upsertMedicalResources(
        listOf(
            UpsertMedicalResourceRequest(
                medicalDataSource.id,
                medicalDataSource.fhirVersion,
                medicationJsonToInsert // a valid FHIR json string
            )
        )
    )

// Update `MedicalResource`s in the `MedicalDataSource`
val updatedMedicalResources: List<MedicalResource> =
    healthConnectClient.upsertMedicalResources(
        listOf(
            UpsertMedicalResourceRequest(
                medicalDataSource.id,
                medicalDataSource.fhirVersion,
                // a valid FHIR json string
                // if this resource has the same type and ID as in `medicationJsonToInsert`,
                // this `upsertMedicalResources()` call will update the previously inserted
                // `MedicalResource`
                updatedMedicationJsonToInsert
            )
        )
    )

MedicalResource के रिकॉर्ड पाना

medicalResourceType की जानकारी देकर, किसी get अनुरोध को फ़िल्टर करें. पेज किए गए अनुरोधों का इस्तेमाल करना न भूलें. साथ ही, रेट सीमित करने के बारे में भी ध्यान रखें.

// 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
            )
        }
    )

आईडी के हिसाब से MedicalResource रिकॉर्ड मिटाना

MedicalResource रिकॉर्ड को आईडी के हिसाब से मिटाया जा सकता है:

// Delete `MedicalResource`s matching the specified `dataSourceId`, `type` and `fhirResourceId`
healthConnectClient.deleteMedicalResources(
    medicalResources.map { medicalResource: MedicalResource ->
        MedicalResourceId(
            dataSourceId = medicalDataSource.id,
            fhirResourceType = medicalResource.id.fhirResourceType,
            fhirResourceId = medicalResource.id.fhirResourceId
        )
    }
)

इसके अलावा, medicalResourceType भी इन्हें मिटा सकता है:

// Delete all `MedicalResource`s that are in any pair of provided `dataSourceIds` and
// `medicalResourceTypes`
healthConnectClient.deleteMedicalResources(
    DeleteMedicalResourcesRequest(
        dataSourceIds = setOf(medicalDataSource.id),
        medicalResourceTypes = setOf(MEDICAL_RESOURCE_TYPE_MEDICATIONS)
    )
)