Exigences concernant les métadonnées

Ce guide est compatible avec Santé Connect version 1.1.0-alpha12 et ultérieures.

Des modifications ont été apportées aux métadonnées dans Santé Connect pour les développeurs qui effectuent une mise à niveau vers 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é introduites dans le SDK Jetpack Santé Connect à partir de la version 1.1.0-alpha12 pour 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 (Constructeur interne) 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é le début ou la fin de la session d'enregistrement sur un appareil.

Exemple :

 StepsRecord(
    startTime = Instant.ofEpochMilli(1234L),
    startZoneOffset = null,
    endTime = Instant.ofEpochMilli(1236L),
    endZoneOffset = null,
    metadata = Metadata(),
    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 Device classe dans la documentation Jetpack. Les types d'appareils actuels incluent les suivants :

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 bague.
TYPE_HEAD_MOUNTED Le type d'appareil est un appareil monté sur la tête.
TYPE_FITNESS_BAND Le type d'appareil est un bracelet connecté.
TYPE_CHEST_STRAP Le type d'appareil est une ceinture pectorale.
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 un appareil médical.
TYPE_GLASSES Le type d'appareil est une paire de lunettes connectées ou des lunettes.
TYPE_HEARABLE Le type d'appareil est un appareil auditif.
TYPE_FITNESS_MACHINE Le type d'appareil est une machine stationnaire.
TYPE_FITNESS_EQUIPMENT Le type d'appareil est un é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.
Pour déterminer si l'appareil d'un utilisateur est compatible avec les types d'appareils étendus sur Santé Connect, vérifiez la disponibilité de 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
}
Pour en savoir plus, consultez Vérifier la disponibilité des fonctionnalités.

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
)

Extraits mis à jour

Les guides Santé Connect ont été mis à jour partout où de nouveaux extraits sont nécessaires pour respecter les nouvelles exigences relatives aux 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 :

  • activelyRecorded

    • fun activelyRecorded(device: Device): Metadata.
    • fun activelyRecorded(clientRecordId: String, clientRecordVersion: Long = 0, device: Device): Metadata
    • fun activelyRecordedWithId(id: String, device: Device): Metadata
  • autoRecorded

    • fun autoRecorded(device: Device): Metadata
    • fun autoRecorded(clientRecordId: String, clientRecordVersion: Long = 0, device: Device): Metadata
    • fun autoRecordedWithId(id: String, device: Device): Metadata
  • manualEntry

    • fun manualEntry(device: Device? = null): Metadata
    • fun manualEntry(clientRecordId: String, clientRecordVersion: Long = 0, device: Device? = null): Metadata
    • fun manualEntryWithId(id: String, device: Device? = null): Metadata
  • unknownRecordingMethod

    • fun unknownRecordingMethod(device: Device? = null): Metadata
    • fun unknownRecordingMethod(clientRecordId: String, clientRecordVersion: Long = 0, device: Device? = null): Metadata
    • fun unknownRecordingMethodWithId(id: String, device: Device? = null): Metadata

Pour en savoir plus, consultez le projet Android Open Source.

Tester les données

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 de 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 :

  1. Mettez à niveau votre bibliothèque vers la version 1.1.0-alpha12.

  2. 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 dans Metadata, telles que Metadata.manualEntry() ou Metadata.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_WATCH ou Device.TYPE_PHONE.
  3. Si votre application écrit des types d'appareils étendus, placez-les derrière FEATURE_EXTENTED_DEVICE_TYPES pour éviter les TYPE_UNKNOWN inattendus sur les appareils où la fonctionnalité n'est pas disponible.