PHR - Jetpack SDK

Disponibilité de la fonctionnalité

Pour déterminer si l'appareil d'un utilisateur est compatible avec les plans d'entraînement sur Santé Connect, vérifiez la disponibilité de FEATURE_PERSONAL_HEALTH_RECORD sur le client:

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

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

Pour en savoir plus, consultez Vérifier la disponibilité des fonctionnalités.

Autorisations requises

L'accès aux dossiers médicaux personnels est protégé par les autorisations suivantes:

  • 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

Déclarez ces autorisations dans la Play Console pour votre application, ainsi que dans le fichier manifeste de votre application:

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

Vous êtes responsable de déclarer toutes les autorisations appropriées que vous prévoyez d'utiliser dans vos appareils et applications. Vous devez également vérifier que chaque autorisation a été accordée par l'utilisateur avant utilisation.

Exemples d'utilisation

Cette section présente des exemples de code d'opérations de base pour la prochaine version du SDK Jetpack avec prise en charge de la PHR. Ces exemples sont susceptibles d'être modifiés.

Créer un enregistrement 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)
        )
    )

Supprimer un enregistrement MedicalDataSource

L'exemple précédent renvoie un id par le système lors de la création. Pour supprimer, référencez ce même id:

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

Obtenir un enregistrement MedicalDataSource par nom de package

Utilisez GetMedicalDataSourcesRequest pour effectuer une requête par nom de package (application):

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

Obtenir un enregistrement MedicalDataSource par ID

Vous pouvez également demander par id si vous le connaissez:

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

Insérer ou mettre à jour des enregistrements MedicalResource

Utilisez UpsertMedicalResourceRequest pour insérer des enregistrements MedicalResource ou mettre à jour des enregistrements MedicalResource existants pour un MedicalDataSource:

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

Obtenir des enregistrements MedicalResource

Filtrez une requête get en spécifiant le medicalResourceType. Veillez à utiliser des requêtes paginées et tenez compte de la limitation du débit.

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

Obtenir des enregistrements MedicalResource par ID

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

Supprimer un enregistrement MedicalResource par ID

Les enregistrements MedicalResource peuvent être supprimés par ID:

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

Ils peuvent également être supprimés par 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)
    )
)