Ce guide est compatible avec la version 1.2.0-alpha05 et ultérieure de Santé Connect.
Des modifications ont été apportées aux métadonnées de Santé Connect pour les développeurs qui passent à la version 1.1.0-alpha12 ou ultérieure.
Informations sur la bibliothèque
L'ID d'artefact du plug-in Android Gradle dans le dépôt Maven de Google identifie la bibliothèque Santé Connect que vous devrez mettre à niveau.
Ajoutez cette dépendance du SDK Santé Connect au fichier build.gradle au niveau de votre module :
dependencies {
implementation "androidx.health.connect:connect-client:1.1.0-alpha12"
}
Modifications des métadonnées
Deux modifications de métadonnées ont été apportées au SDK Jetpack Santé Connect à partir de la version 1.1.0-alpha12 pour aider à vérifier que des métadonnées utiles supplémentaires existent dans l'écosystème. Si metadata n'est pas inclus dans votre constructeur Record, une erreur Constructor internal peut s'afficher.
Spécifier la méthode d'enregistrement
Vous devez spécifier les détails des métadonnées chaque fois qu'un objet de type Record() est instancié.
Lorsque vous écrivez des données dans Santé Connect, vous devez spécifier l'une des quatre méthodes d'enregistrement en utilisant l'une des méthodes de fabrique correspondantes pour instancier Metadata :
| Méthode d'enregistrement | Description |
|---|---|
RECORDING_METHOD_UNKNOWN |
La méthode d'enregistrement ne peut pas être vérifiée. |
RECORDING_METHOD_MANUAL_ENTRY |
L'utilisateur a saisi les données. |
RECORDING_METHOD_AUTOMATICALLY_RECORDED |
Un appareil ou un capteur a enregistré les données. |
RECORDING_METHOD_ACTIVELY_RECORDED |
L'utilisateur a lancé ou arrêté la session d'enregistrement sur un appareil. |
Exemple :
StepsRecord( startTime = Instant.ofEpochMilli(1234L), startZoneOffset = null, endTime = Instant.ofEpochMilli(1236L), endZoneOffset = null, metadata = Metadata.activelyRecorded(device = Device(type = Device.TYPE_WATCH)), count = 10 )
Type d'appareil
Vous devez spécifier un type d'appareil pour toutes les données enregistrées automatiquement et activement. Pour en savoir plus, consultez la classe Device dans la documentation Jetpack. Voici les types d'appareils actuels :
| Type d'appareil | Description |
|---|---|
TYPE_UNKNOWN |
Le type d'appareil est inconnu. |
TYPE_WATCH |
Le type d'appareil est une montre. |
TYPE_PHONE |
Le type d'appareil est un téléphone. |
TYPE_SCALE |
Le type d'appareil est une balance. |
TYPE_RING |
Le type d'appareil est une sonnette. |
TYPE_HEAD_MOUNTED |
Le type d'appareil est un appareil porté sur la tête. |
TYPE_FITNESS_BAND |
Le type d'appareil est un bracelet d'activité. |
TYPE_CHEST_STRAP |
Le type d'appareil est une ceinture cardiofréquencemètre. |
TYPE_SMART_DISPLAY |
Le type d'appareil est un écran connecté. |
Certaines valeurs Device.type ne sont disponibles que dans les versions ultérieures de Santé Connect. Lorsque la fonctionnalité de types d'appareils étendus n'est pas disponible, ces types sont traités comme Device.TYPE_UNKNOWN.
| Types d'appareils étendus | Description |
|---|---|
TYPE_CONSUMER_MEDICAL_DEVICE |
Le type d'appareil est "Dispositif médical". |
TYPE_GLASSES |
Le type d'appareil est une paire de lunettes connectées. |
TYPE_HEARABLE |
Le type d'appareil est un appareil auditif. |
TYPE_FITNESS_MACHINE |
Le type d'appareil est une machine fixe. |
TYPE_FITNESS_EQUIPMENT |
Le type d'appareil est "Équipement de fitness". |
TYPE_PORTABLE_COMPUTER |
Le type d'appareil est un ordinateur portable. |
TYPE_METER |
Le type d'appareil est un compteur de mesure. |
FEATURE_EXTENDED_DEVICE_TYPES sur le client :
if (healthConnectClient
.features
.getFeatureStatus(
HealthConnectFeatures.FEATURE_EXTENDED_DEVICE_TYPES
) == HealthConnectFeatures.FEATURE_STATUS_AVAILABLE) {
// Feature is available
} else {
// Feature isn't available
}
Exemple :
val WATCH_DEVICE = Device( manufacturer = "Google", model = "Pixel Watch", type = Device.TYPE_WATCH ) // Phone val PHONE_DEVICE = Device( manufacturer = "Google", model = "Pixel 8", type = Device.TYPE_PHONE ) // Ring val RING_DEVICE = Device( manufacturer = "Oura", model = "Ring Gen3", type = Device.TYPE_RING ) // Scale val SCALE_DEVICE = Device( manufacturer = "Withings", model = "Body Comp", type = Device.TYPE_SCALE )
Identifiant unique du dispositif (IUD)
Pour Santé Connect sur Android 17 (niveau d'API 37.1) ou l'extension U 23 ou version ultérieure, la classe Device est compatible avec l'identifiant unique de l'appareil (UDI). Associer les informations enregistrées sur le modèle UDI d'un dispositif médical à vos dossiers écrits permet aux applications en aval (telles que les plates-formes de télémédecine ou les portails cliniques) d'identifier les lectures de qualité clinique et de les distinguer des données générales des accessoires connectés grand public.
Déclarer l'autorisation
Pour écrire les détails de l'UDI dans Santé Connect, vous devez déclarer l'autorisation WRITE_DEVICE_UDI dans le fichier AndroidManifest.xml de votre application :
<uses-permission android:name="android.permission.health.WRITE_DEVICE_UDI" />
Notez que WRITE_DEVICE_UDI est une autorisation normale. Vous devez le déclarer dans votre fichier manifeste, mais vous n'avez pas besoin de le demander à l'utilisateur au moment de l'exécution. Elle est automatiquement accordée à votre application lors de l'installation.
N'écrivez que la partie "Identifiant du dispositif" (ID)
Un IUD complet se compose de deux parties :
- Identifiant de dispositif (IUD-ID) : identifiant reconnu dans le monde entier, attribué à un modèle de dispositif spécifique par une agence émettrice (par exemple, GS1).
- Identifiant de production (UDI-PI) : attributs spécifiques à l'unité, tels que les numéros de série, les numéros de lot, les dates de fabrication ou les dates d'expiration.
Pour protéger la confidentialité des utilisateurs, ne renseignez que la partie UDI-DI du code dans Health Connect. N'incluez pas d'attributs d'identifiant de production (tels que les numéros de série ou de lot).
Exemple de code
Remarque : Vous pouvez définir l'IUD lorsque vous construisez une instance Device.
SDK Jetpack
val device = Device( type = Device.TYPE_CONSUMER_MEDICAL_DEVICE, manufacturer = "Omron", model = "HEM-7121", udi = "04015674011832" // Device Identifier (UDI-DI) portion only )
API de la plate-forme
val device = Device.Builder() .setType(Device.DEVICE_TYPE_CONSUMER_MEDICAL_DEVICE) .setManufacturer("Omron") .setModel("HEM-7121") .setUdi("04015674011832") // Device Identifier (UDI-DI) portion only .build()
Si vous écrivez des données avec un UDI sans déclarer l'autorisation WRITE_DEVICE_UDI, Santé Connect génère une SecurityException au moment de l'écriture.
Utiliser l'IUD pour vérifier l'autorisation de l'appareil
Health Connect sert de couche de transport et ne valide pas l'authenticité ni l'état d'enregistrement de l'UDI.
Pour les lecteurs de données, la présence d'un UDI indique que les données proviennent d'un dispositif médical enregistré. Les applications de lecture doivent interroger les bases de données réglementaires telles que la base de données GUDID (Global Unique Device Identification Database) de la FDA ou EUDAMED de l'UE pour vérifier les classifications des dispositifs, l'état d'autorisation réglementaire (par exemple, classe I, II ou III) ou l'utilisation prévue spécifique.
Extraits mis à jour
Les guides Santé Connect ont été mis à jour chaque fois que de nouveaux extraits étaient nécessaires pour respecter les nouvelles exigences concernant les métadonnées. Pour obtenir des exemples, consultez la page Écrire des données.
Nouvelles méthodes de métadonnées
Les métadonnées ne peuvent plus être instanciées directement. Utilisez donc l'une des méthodes de fabrique pour obtenir une nouvelle instance de métadonnées. Les méthodes de fabrique vérifient que les informations sur l'appareil sont fournies lorsqu'un appareil ou un capteur a été utilisé pour enregistrer les données. Pour les données saisies manuellement, il reste facultatif de fournir des informations sur l'appareil. Chaque fonction comporte trois variantes de signature :
activelyRecordedfun activelyRecorded(device: Device): Metadata.fun activelyRecorded(clientRecordId: String, clientRecordVersion: Long = 0, device: Device): Metadatafun activelyRecordedWithId(id: String, device: Device): Metadata
autoRecordedfun autoRecorded(device: Device): Metadatafun autoRecorded(clientRecordId: String, clientRecordVersion: Long = 0, device: Device): Metadatafun autoRecordedWithId(id: String, device: Device): Metadata
manualEntryfun manualEntry(device: Device? = null): Metadatafun manualEntry(clientRecordId: String, clientRecordVersion: Long = 0, device: Device? = null): Metadatafun manualEntryWithId(id: String, device: Device? = null): Metadata
unknownRecordingMethodfun unknownRecordingMethod(device: Device? = null): Metadatafun unknownRecordingMethod(clientRecordId: String, clientRecordVersion: Long = 0, device: Device? = null): Metadatafun unknownRecordingMethodWithId(id: String, device: Device? = null): Metadata
Pour en savoir plus, consultez le Projet Android Open Source.
Données de test
Utilisez la bibliothèque de test et MetadataTestHelper pour simuler les valeurs de métadonnées attendues :
private val TEST_METADATA =
Metadata.unknownRecordingMethod(
clientRecordId = "clientId",
clientRecordVersion = 1L,
device = Device(type = Device.TYPE_UNKNOWN),
).populatedWithTestValues(id = "test")
Cela simule le comportement de l'implémentation Santé Connect, qui renseigne automatiquement ces valeurs lors de l'insertion d'un enregistrement.
Pour la bibliothèque de test, vous devez ajouter cette dépendance du SDK Santé Connect au fichier build.gradle au niveau de votre module :
dependencies {
testImplementation "androidx.health.connect:connect-testing:1.0.0-alpha02"
}
Mettre à niveau la bibliothèque
Voici les principales étapes à suivre :
Mettez à niveau votre bibliothèque vers la version 1.1.0-alpha12.
Lors de la compilation de la bibliothèque, des erreurs de compilation seront générées lorsque de nouvelles métadonnées seront nécessaires. Pour résoudre ces erreurs et terminer la migration, vérifiez que vous apportez les modifications suivantes :
- Il est obligatoire de spécifier une méthode d'enregistrement lors de la construction d'un
Record. Pour ce faire, utilisez l'une des méthodes de fabrique fournies dansMetadata, commeMetadata.manualEntry()ouMetadata.activelyRecorded(device = Device(...)). - Pour les données enregistrées par un appareil, il est obligatoire de spécifier un type d'appareil, tel que
Device.TYPE_WATCHouDevice.TYPE_PHONE.
- Il est obligatoire de spécifier une méthode d'enregistrement lors de la construction d'un
Si votre application écrit des types d'appareils étendus, placez-les derrière
FEATURE_EXTENTED_DEVICE_TYPESpour éviter lesTYPE_UNKNOWNinattendus sur les appareils où la fonctionnalité n'est pas disponible.