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