PHR – Jetpack SDK

Verfügbarkeit der Funktion

Wenn du wissen möchtest, ob das Gerät eines Nutzers Trainingspläne in Health Connect unterstützt, prüfe die Verfügbarkeit von FEATURE_PERSONAL_HEALTH_RECORD auf dem Client:

if (healthConnectClient
     .features
     .getFeatureStatus(
       HealthConnectFeatures.FEATURE_PERSONAL_HEALTH_RECORD
     ) == HealthConnectFeatures.FEATURE_STATUS_AVAILABLE) {

  // Feature is available
} else {
  // Feature isn't available
}

Weitere Informationen finden Sie unter Verfügbarkeit von Funktionen prüfen.

Erforderliche Berechtigungen

Der Zugriff auf persönliche Gesundheitsdaten wird durch die folgenden Berechtigungen geschützt:

  • 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

Deklarieren Sie diese Berechtigungen in der Play Console für Ihre App und im Manifest Ihrer App:

<application>
  <uses-permission
android:name="android.permission.health.WRITE_MEDICAL_DATA" />
  <uses-permission
android:name="android.permission.health.READ_MEDICAL_DATA_ALLERGIES_INTOLERANCES" />
...
</application>

Sie sind dafür verantwortlich, alle erforderlichen Berechtigungen anzugeben, die Sie auf Ihren Geräten und in Ihren Apps verwenden möchten. Sie sollten außerdem prüfen, ob jede Berechtigung vor der Verwendung vom Nutzer erteilt wurde.

Anwendungsbeispiel

Dieser Abschnitt enthält Codebeispiele für grundlegende Vorgänge für die bevorstehende Version des Jetpack SDK mit Unterstützung für persönliche Gesundheitsdaten. Sie können sich ändern.

MedicalDataSource-Eintrag erstellen

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

Datensatz „MedicalDataSource“ löschen

Im vorherigen Beispiel gibt das System beim Erstellen eine id zurück. Wenn Sie sie löschen möchten, verwenden Sie dieselbe id:

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

MedicalDataSource-Eintrag nach Paketnamen abrufen

Verwenden Sie GetMedicalDataSourcesRequest, um eine Anfrage nach Paketnamen (App) zu stellen:

// 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-Eintrag nach ID abrufen

Oder Sie können die Karte anhand der id anfordern, falls Sie diese kennen:

// Retrieve all `MedicalDataSource` with `id` matching any of the given ids
val medicalDataSources: List<MedicalDataSource> =
    healthConnectClient.getMedicalDataSources(listOf(medicalDataSource.id, anotherId))

Einträge für „MedicalResource“ einfügen oder aktualisieren

Verwenden Sie UpsertMedicalResourceRequest, um neue MedicalResource-Datensätze für eine MedicalDataSource einzufügen oder vorhandene zu aktualisieren:

// 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-Einträge abrufen

Filtern Sie eine GET-Anfrage, indem Sie den medicalResourceType angeben. Verwenden Sie gepufferte Anfragen und beachten Sie die Geschwindigkeitsbegrenzung.

// 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-Einträge nach ID abrufen

// 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-Eintrag anhand der ID löschen

MedicalResource-Einträge können anhand der ID gelöscht werden:

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

Sie können auch mit medicalResourceType gelöscht werden:

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