Votre première appli intégrée à Santé Connect

1. Introduction

e4a4985ad1cdae8b.png

Qu'est-ce que Santé Connect ?

Santé Connect est une plate-forme de données de santé pour les développeurs d'applications Android. Elle fournit une interface unique et consolidée pour accéder aux données de santé et de remise en forme des utilisateurs, et assure un fonctionnement cohérent sur tous les appareils. Avec Santé Connect, les utilisateurs disposent d'un espace de stockage sécurisé sur leur appareil pour leurs données de santé et de remise en forme. Ils profitent d'un contrôle total sur l'accès à ces données et d'une entière transparence à ce sujet.

Comment fonctionne Santé Connect ?

Santé Connect prend en charge plus de 50 types et catégories courants de données de santé, y compris l'activité, le sommeil, la nutrition, les données corporelles et les constantes, comme la fréquence cardiaque et la tension artérielle.

Fonctionnement de Santé Connect

Avec l'autorisation de l'utilisateur, les développeurs peuvent lire et écrire des données de manière sécurisée dans Santé Connect à l'aide de schémas et d'un comportement des API standardisés. Les utilisateurs ont un contrôle total sur leurs paramètres de confidentialité, avec des commandes précises pour voir à tout moment quelles applications demandent à accéder aux données. Les données de Santé Connect sont stockées sur l'appareil et chiffrées. Les utilisateurs peuvent désactiver l'accès aux données ou supprimer celles qu'ils ne souhaitent plus stocker sur leur appareil. Ils peuvent également donner la priorité à une source de données plutôt qu'une autre lorsqu'ils utilisent plusieurs applications.

Architecture de Santé Connect

architecture

Voici une explication des principaux aspects et composants architecturaux de Santé Connect :

  • Application cliente : pour intégrer Santé Connect, l'application cliente associe le SDK à son application de santé et de remise en forme. Cela fournit une surface d'API permettant d'interagir avec l'API Santé Connect.
  • Software development kit (kit de développement logiciel) : le SDK permet à l'application cliente de communiquer avec l'APK de Santé Connect via IPC.
  • APK Santé Connect : il s'agit de l'APK qui implémente Santé Connect. Il contient à la fois ses composants de gestion des autorisations et de gestion des données. L'APK de Santé Connect est disponible directement sur l'appareil de l'utilisateur, ce qui fait de Santé Connect un outil axé sur l'appareil plutôt que sur le compte.
  • Gestion des autorisations : Santé Connect comprend une interface utilisateur via laquelle les applications demandent l'autorisation de l'utilisateur pour afficher les données. Elle fournit également une liste des autorisations utilisateur existantes. Les utilisateurs peuvent ainsi gérer l'accès qu'ils ont accordé ou refusé à différentes applications.
  • Gestion des données : Santé Connect fournit une interface utilisateur offrant un aperçu des données enregistrées, qu'il s'agisse du nombre de pas, de la vitesse à vélo, de la fréquence cardiaque ou d'autres types de données pris en charge.

Objectifs de l'atelier

Dans cet atelier de programmation, vous allez créer une application de santé et de remise en forme simple intégrée à Santé Connect. Votre application permettra les actions suivantes :

  • Obtenir et vérifier les autorisations des utilisateurs concernant l'accès aux données
  • Écrire des données dans Santé Connect
  • Lire les données globales de Santé Connect

Points abordés

  • Comment configurer votre environnement pour intégrer Santé Connect
  • Comment obtenir des autorisations et effectuer des vérifications d'autorisation
  • Comment contribuer aux données de santé et de remise en forme sur la plate-forme Santé Connect
  • Comment bénéficier du stockage des données sur l'appareil
  • Comment valider votre application avec les outils Google pour les développeurs

Ce dont vous avez besoin

  • La dernière version stable d'Android Studio
  • Un appareil mobile Android équipé du SDK Android 28 (Pie) ou version ultérieure

2. Configuration

Installer Santé Connect

Santé Connect est disponible sur le Play Store. Installez Santé Connect sur votre appareil mobile pour traiter toutes les requêtes envoyées par votre application à l'aide du SDK Santé Connect. Scannez le code QR pour installer Santé Connect.

633ed0490a74595d.png

Obtenir l'exemple de code

Si git est installé, vous pouvez simplement exécuter la commande ci-dessous pour cloner le code à partir du dépôt. Pour vérifier s'il est installé, saisissez git --version dans le terminal ou la ligne de commande, et vérifiez qu'il fonctionne correctement.

git clone https://github.com/android/android-health-connect-codelab.git
cd android-health-connect-codelab

Si vous n'avez pas git, cliquez sur le bouton ci-dessous pour télécharger l'ensemble du code de cet atelier de programmation :

Télécharger le fichier ZIP

Le répertoire d'exemples contient le code start et le code finished de cet atelier. Dans la vue Project (Projet) d'Android Studio, vous trouverez deux modules :

  • start : code de démarrage du projet, que vous allez modifier tout au long de l'atelier de programmation.
  • finished : code final de cet atelier de programmation (pour vérifier ce que vous avez fait).

Se familiariser avec le code "start"

L'application exemple de l'atelier de programmation comporte des interfaces utilisateur de base créées par Jetpack Compose avec les écrans suivants :

  • WelcomeScreen : page de destination de l'application, qui affiche différents messages en fonction de la disponibilité de Santé Connect, qu'elle soit installée, non installée ou non compatible.
  • PrivacyPolicyScreen : explique comment l'application utilise les autorisations et s'affiche lorsque l'utilisateur clique sur le lien Privacy policy (Règles de confidentialité) dans la boîte de dialogue d'autorisations de Santé Connect.
  • InputReadingsScreen : illustre la lecture et l'écriture de données de poids simples.
  • ExerciseSessionScreen : permet aux utilisateurs d'insérer et de répertorier des séances d'exercice. Lorsque l'utilisateur clique sur l'enregistrement, il est redirigé vers ExerciseSessionDetailScreen où il peut voir plus de données pour cette séance.
  • DifferentialChangesScreen : montre comment générer un jeton de modification et comment recevoir les nouvelles modifications de Santé Connect.

HealthConnectManager stocke toutes les fonctions qui interagissent avec Santé Connect. Dans cet atelier de programmation, nous allons vous guider pas à pas pour utiliser les fonctionnalités essentielles. Les chaînes <!-- TODO: du build start ont des sections correspondantes dans cet atelier de programmation où des exemples de codes sont fournis pour que vous puissiez les insérer dans le projet.

Commençons par ajouter Santé Connect au projet !

Ajouter le SDK client Santé Connect

Pour commencer à utiliser le SDK Santé Connect, vous devez ajouter une dépendance au fichier build.gradle. Pour obtenir la dernière version de Santé Connect, consultez la version de la bibliothèque Jetpack.

dependencies {
    // Add a dependency of Health Connect SDK
    implementation "androidx.health.connect:connect-client:1.0.0-alpha11"
}

Rendre Santé Connect visible

Pour interagir avec Santé Connect dans l'application, déclarez le nom du package Santé Connect dans le fichier AndroidManifest.xml :

<!-- TODO: declare Health Connect visibility -->
<queries>
   <package android:name="com.google.android.apps.healthdata" />
</queries>

Exécuter le projet

Une fois que vous avez fini, exécutez le projet start. À ce stade, vous devriez voir l'écran de bienvenue indiquant que Santé Connect est installé sur cet appareil, et un menu. Nous ajouterons les fonctionnalités permettant d'interagir avec Santé Connect dans les sections suivantes.

d54773774e4dc9f.png 462cd7b6cf553ad.png

3. Contrôle des autorisations

Santé Connect recommande aux développeurs de limiter les demandes d'autorisation aux types de données utilisés dans l'application. Les demandes d'autorisation globales nuisent à la confiance que vous portent les utilisateurs. Si une autorisation est refusée plus de deux fois, votre application sera verrouillée. Par conséquent, les demandes d'autorisation n'apparaîtront plus.

Pour les besoins de cet atelier de programmation, nous n'avons besoin que des autorisations suivantes :

  • Séance d'exercice
  • Fréquence cardiaque
  • Pas
  • Total des calories brûlées
  • Poids

Déclarer des autorisations

Chaque type de données que votre application lit ou écrit doit être déclaré à l'aide d'une autorisation dans AndroidManifest.xml. À partir de la version alpha10, Santé Connect utilise le format de déclaration d'autorisations Android standard.

Pour déclarer les autorisations pour les types de données requis, utilisez les éléments <uses-permission> et attribuez les autorisations à leur nom respectif. Imbriquez-les dans les balises <manifest>. Pour obtenir la liste complète des autorisations et des types de données correspondants, consultez la section Liste des types de données.

<!-- TODO: declare Health Connect permissions -->
  <uses-permission android:name="android.permission.health.READ_HEART_RATE"/>
  <uses-permission android:name="android.permission.health.WRITE_HEART_RATE"/>
  <uses-permission android:name="android.permission.health.READ_STEPS"/>
  <uses-permission android:name="android.permission.health.WRITE_STEPS"/>
  <uses-permission android:name="android.permission.health.READ_EXERCISE"/>
  <uses-permission android:name="android.permission.health.WRITE_EXERCISE"/>
  <uses-permission android:name="android.permission.health.READ_TOTAL_CALORIES_BURNED"/>
  <uses-permission android:name="android.permission.health.WRITE_TOTAL_CALORIES_BURNED"/>
  <uses-permission android:name="android.permission.health.READ_WEIGHT"/>
  <uses-permission android:name="android.permission.health.WRITE_WEIGHT"/>

Déclarez un filtre d'intent dans AndroidManifest.xml pour gérer l'intent qui explique comment votre application utilisera ces autorisations. Votre application doit gérer cet intent et afficher des règles de confidentialité décrivant comment les données utilisateur sont utilisées et traitées. Cet intent est envoyé à l'application lorsque l'utilisateur appuie sur le lien Privacy policy (Règles de confidentialité) dans la boîte de dialogue d'autorisations de Santé Connect.

<!-- TODO: Add intent filter to handle permission rationale intent -->
<intent-filter>
    <action android:name="androidx.health.ACTION_SHOW_PERMISSIONS_RATIONALE" />
</intent-filter>

Rouvrez l'application pour consulter les autorisations déclarées. Cliquez sur Settings (Paramètres) dans le panneau de menu pour accéder à l'écran des paramètres de Santé Connect. Cliquez ensuite sur App permissions (Autorisations des applications). Santé Connect devrait apparaître dans la liste. Cliquez sur Santé Connect pour afficher la liste des types de données pour l'accès en lecture et en écriture sur cette application.

fbed69d871f92178.png 1b9c7764c1dbdfac.png

Demander des autorisations

En plus de rediriger directement les utilisateurs vers les paramètres de Santé Connect pour gérer les autorisations, vous pouvez également faire en sorte que votre application demande des autorisations via les API Santé Connect. Notez que les utilisateurs peuvent modifier les autorisations à tout moment. Assurez-vous donc que votre application vérifie si les autorisations requises sont disponibles. Dans le projet de l'atelier de programmation, nous vérifions et envoyons des demandes d'autorisation avant de lire ou d'écrire des données.

HealthConnectClient est un point d'entrée de l'API Santé Connect. Dans HealthConnectManager.kt, obtenez une instance HealthConnectClient.

private val healthConnectClient by lazy { HealthConnectClient.getOrCreate(context) }

Pour lancer la boîte de dialogue des demandes d'autorisations dans votre application, commencez par créer un ensemble d'autorisations pour les types de données requis. Vous ne devez demander des autorisations que pour les types de données que vous prévoyez d'utiliser.

Par exemple, sur l'écran Record weight (Enregistrer le poids), vous ne devez accorder que les autorisations de lecture et d'écriture pour le poids. Nous avons créé une autorisation dans InputReadingsViewModel.kt, comme indiqué dans le code suivant.

  val permissions = setOf(
    HealthPermission.getReadPermission(WeightRecord::class),
    HealthPermission.getWritePermission(WeightRecord::class),
  )

Vérifiez ensuite si les autorisations ont été accordées avant de lancer la demande d'autorisation. Dans HealthConnectManager.kt, utilisez getGrantedPermissions pour vérifier si l'autorisation des types de données requis est accordée. Pour lancer la demande d'autorisation, vous devez créer un ActivityResultContract à l'aide de PermissionController.createRequestPermissionResultContract(), qui devrait se lancer lorsque les autorisations requises ne sont pas accordées.

  suspend fun hasAllPermissions(permissions: Set<String>): Boolean {
    return healthConnectClient.permissionController.getGrantedPermissions().containsAll(permissions)
  }

  fun requestPermissionsActivityContract(): ActivityResultContract<Set<String>, Set<String>> {
    return PermissionController.createRequestPermissionResultContract()
  }

Dans l'application exemple de l'atelier de programmation, le bouton Request permissions (Demander des autorisations) peut s'afficher à l'écran si vous n'avez pas accordé les autorisations pour les types de données requis. Cliquez sur Request permissions (Demander des autorisations) pour ouvrir la boîte de dialogue d'autorisation de Santé Connect. Autorisez les autorisations requises et revenez à l'application de l'atelier de programmation.

626eedcec23659ce.png 6df6cf0e5c4a1a9e.png

4. Écrire des données

Commençons à écrire les enregistrements dans Santé Connect. Pour écrire un enregistrement de poids, créez un objet WeightRecord avec le poids saisi. Notez que le SDK Santé Connect prend en charge différentes classes d'unités. Par exemple, utilisez Mass.kilograms(weightInput) pour définir le poids des utilisateurs en kilogrammes.

Toutes les données écrites dans Santé Connect doivent préciser des informations de fuseau horaire. Les informations de fuseau horaire précisées lors de l'écriture des données permettent de les avoir à disposition lors de la lecture de données dans Santé Connect.

Après avoir créé l'enregistrement de poids, utilisez healthConnectClient.insertRecords pour écrire les données dans Santé Connect.

/**
* TODO: Writes [WeightRecord] to Health Connect.
*/
suspend fun writeWeightInput(weightInput: Double) {
   val time = ZonedDateTime.now().withNano(0)
   val weightRecord = WeightRecord(
       weight = Mass.kilograms(weightInput),
       time = time.toInstant(),
       zoneOffset = time.offset
   )
   val records = listOf(weightRecord)
   try {
      healthConnectClient.insertRecords(records)
      Toast.makeText(context, "Successfully insert records", Toast.LENGTH_SHORT).show()
   } catch (e: Exception) {
      Toast.makeText(context, e.message.toString(), Toast.LENGTH_SHORT).show()
   }
}

Exécutons à présent l'application. Cliquez sur Record weight (Enregistrer le poids) et saisissez un nouvel enregistrement de poids en kilogrammes. Pour vérifier si l'enregistrement de poids a bien été écrit dans Santé Connect, ouvrez les paramètres de Santé Connect et cliquez sur Data and access (Données et accès) -> Body measurements (Données corporelles) -> Weight (Poids) -> See all entries (Afficher toutes les entrées). Le nouvel enregistrement de poids écrit depuis l'atelier de programmation Santé Connect devrait s'afficher.

Écrire des séances d'exercice

Une séance est un intervalle de temps pendant lequel un utilisateur effectue une activité. Une séance d'exercice dans Santé Connect peut inclure toutes sortes d'activités, par exemple la course à pied ou le badminton. Les séances permettent aux utilisateurs de mesurer leurs performances au fil du temps. Ces données enregistrent un ensemble de relevés instantanés, par exemple une fréquence cardiaque continue ou des relevés de localisation pendant une activité, mesurés sur une période donnée.

L'exemple suivant vous montre comment rédiger une séance d'exercice. Utilisez healthConnectClient.insertRecords pour insérer plusieurs enregistrements de données associés à une séance. Dans cet exemple, la requête d'insertion inclut ExerciseSessionRecord avec ExerciseType, StepsRecord avec le nombre de pas, TotalCaloriesBurnedRecord avec Energy et une série d'exemples de HeartRateRecord.

  /**
   * TODO: Writes an [ExerciseSessionRecord] to Health Connect.
   */
  suspend fun writeExerciseSession(start: ZonedDateTime, end: ZonedDateTime) {
    healthConnectClient.insertRecords(
      listOf(
        ExerciseSessionRecord(
          startTime = start.toInstant(),
          startZoneOffset = start.offset,
          endTime = end.toInstant(),
          endZoneOffset = end.offset,
          exerciseType = ExerciseSessionRecord.EXERCISE_TYPE_RUNNING,
          title = "My Run #${Random.nextInt(0, 60)}"
        ),
        StepsRecord(
          startTime = start.toInstant(),
          startZoneOffset = start.offset,
          endTime = end.toInstant(),
          endZoneOffset = end.offset,
          count = (1000 + 1000 * Random.nextInt(3)).toLong()
        ),
        TotalCaloriesBurnedRecord(
          startTime = start.toInstant(),
          startZoneOffset = start.offset,
          endTime = end.toInstant(),
          endZoneOffset = end.offset,
          energy = Energy.calories((140 + Random.nextInt(20)) * 0.01)
        )
      ) + buildHeartRateSeries(start, end)
    )
  }

  /**
   * TODO: Build [HeartRateRecord].
   */
  private fun buildHeartRateSeries(
    sessionStartTime: ZonedDateTime,
    sessionEndTime: ZonedDateTime,
  ): HeartRateRecord {
    val samples = mutableListOf<HeartRateRecord.Sample>()
    var time = sessionStartTime
    while (time.isBefore(sessionEndTime)) {
      samples.add(
        HeartRateRecord.Sample(
          time = time.toInstant(),
          beatsPerMinute = (80 + Random.nextInt(80)).toLong()
        )
      )
      time = time.plusSeconds(30)
    }
    return HeartRateRecord(
      startTime = sessionStartTime.toInstant(),
      startZoneOffset = sessionStartTime.offset,
      endTime = sessionEndTime.toInstant(),
      endZoneOffset = sessionEndTime.offset,
      samples = samples
    )
  }

5. Boîte à outils Santé Connect

Présentation de la boîte à outils Santé Connect

La boîte à outils Santé Connect aide les développeurs à tester l'intégration de leur application avec Santé Connect. Elle peut lire et écrire des données directement dans Santé Connect, ce qui vous permet de tester les opérations CRUD de votre application.

Dans cet atelier de programmation, nous allons utiliser la boîte à outils Santé Connect pour tester les fonctionnalités de lecture et d'écriture que vous venez d'implémenter.

Configurer la boîte à outils Santé Connect

Décompressez le dossier ZIP pour obtenir les fichiers APK. Pour installer le fichier APK de la boîte à outils sur un appareil connecté, utilisez adb. Accédez au dossier dans lequel se trouve l'APK, puis exécutez la commande suivante :

$ adb install HealthConnectToolbox-{Version Number}.apk

Lorsque vous ouvrez la boîte à outils Santé Connect pour la première fois, vous êtes redirigé vers les paramètres d'autorisation sous Apps > Special app access > Display (Applications > Accès spécifiques des applications > Superposer aux autres applis). Cette autorisation permet à la boîte à outils Santé Connect de superposer un contenu aux autres applis. Vous pouvez ainsi tester la lecture et l'écriture des données sans quitter l'appli que vous développez.

Pour gérer les autorisations de lecture et d'écriture à des fins de test, vous pouvez ouvrir l'application Santé Connect depuis l'écran principal de la boîte à outils ou accéder directement au flux d'autorisations.

c3e6fd40b03b408a.png

Lire et écrire des dossiers médicaux

La boîte à outils Santé Connect permet de lire et d'écrire tous les types de données Santé Connect. Dans la dernière séance de l'atelier de programmation, vous avez écrit des données de poids et de séances d'exercice dans Santé Connect. Vérifions si vous pouvez lire ces données depuis la boîte à outils Santé Connect.

Avant de lire et d'écrire dans Santé Connect, vous devez obtenir l'autorisation de l'utilisateur. Il en va de même pour la boîte à outils Santé Connect. Commencez par accepter la demande d'autorisation de la boîte à outils Santé Connect. Ensuite, cliquez sur l'icône de recherche1f407c55884bb8c3.png dans le menu qui s'affiche en superposition pour ouvrir la boîte de dialogue, sélectionnez le type de données, par exemple "Weight" (Poids), puis cliquez sur READ HEALTH RECORD (Lire le dossier médical). Vous devriez voir les enregistrements de l'application exemple de l'atelier de programmation que vous venez d'écrire dans Santé Connect.

Pour insérer un enregistrement dans Santé Connect, cliquez sur l'icône de modification 10c524823c596aea.png dans le menu en superposition pour ouvrir la boîte de dialogue. Sélectionnez ensuite le type de données. Nous allons insérer un enregistrement de poids provenant de la boîte à outils. Dans la prochaine séance, nous vous montrerons comment lire l'enregistrement via l'API Santé Connect et afficher les données dans votre application.

cac9d4c249a1d107.png

6. Lire des données

Vous avez créé des enregistrements de poids et de séances d'exercice dans l'application exemple de l'atelier de programmation et dans la boîte à outils. Utilisons maintenant l'API Santé Connect pour lire ces enregistrements. Commencez par créer un ReadRecordsRequest, puis spécifiez le type d'enregistrement et la période de lecture. ReadRecordsRequest peut également définir un dataOriginFilter pour spécifier l'application source de l'enregistrement à partir duquel vous voulez lire les données.

    /**
     * TODO: Reads in existing [WeightRecord]s.
     */
    suspend fun readWeightInputs(start: Instant, end: Instant): List<WeightRecord> {
        val request = ReadRecordsRequest(
            recordType = WeightRecord::class,
            timeRangeFilter = TimeRangeFilter.between(start, end)
        )
        val response = healthConnectClient.readRecords(request)
        return response.records
    }
  /**
   * TODO: Obtains a list of [ExerciseSessionRecord]s in a specified time frame.
   */
  suspend fun readExerciseSessions(start: Instant, end: Instant): List<ExerciseSessionRecord> {
    val request = ReadRecordsRequest(
      recordType = ExerciseSessionRecord::class,
      timeRangeFilter = TimeRangeFilter.between(start, end)
    )
    val response = healthConnectClient.readRecords(request)
    return response.records
  }

Exécutons à présent l'application pour voir si vous pouvez afficher une liste d'enregistrements de poids et de séances d'exercice.

a08af54eef6bc832.png 3b0781389f1094a1.png

7. Lire des données différentielles

L'API Differential Changes de Santé Connect permet de suivre les changements à partir d'un moment précis pour un ensemble de types de données. Cela est utile, par exemple, lorsque vous souhaitez savoir si les utilisateurs ont mis à jour ou supprimé des enregistrements existants en dehors de votre application, afin de mettre à jour votre base de données en conséquence.

La lecture des données avec Santé Connect est limitée aux applications exécutées au premier plan. Cette restriction a pour but de renforcer la confidentialité des données des utilisateurs. Elle avertit et assure les utilisateurs que les données de Santé Connect ne sont pas accessibles en lecture à l'arrière-plan, et que ces données sont seulement lues lorsque l'application est exécutée au premier plan. Lorsque l'application est exécutée au premier plan, l'API Differential Changes permet aux développeurs de récupérer les modifications apportées à Santé Connect en déployant un jeton de modifications.

HealthConnectManager.kt comprend deux fonctions getChangesToken() et getChanges() : nous allons leur ajouter l'API Differential Changes pour obtenir les modifications de données.

Configuration initiale du jeton de modifications

Les modifications de données sont extraites de Santé Connect uniquement lorsque votre application les demande avec un jeton de modifications. Le jeton de modifications représente le point de l'historique des commits à partir duquel les données différentielles seront extraites.

Pour obtenir un jeton de modifications, envoyez une ChangesTokenRequest avec un ensemble de types de données dont vous souhaitez suivre les modifications. Conservez le jeton et utilisez-le lorsque vous souhaitez récupérer des mises à jour de Santé Connect.

  /**
   * TODO: Obtains a Changes token for the specified record types.
   */
  suspend fun getChangesToken(): String {
    return healthConnectClient.getChangesToken(
      ChangesTokenRequest(
        setOf(
          ExerciseSessionRecord::class,
          StepsRecord::class,
          TotalCaloriesBurnedRecord::class,
          HeartRateRecord::class,
          WeightRecord::class
        )
      )
    )
  }

Mise à jour des données avec un jeton de modifications

Pour récupérer les modifications de la dernière synchronisation de votre application avec Santé Connect, utilisez le jeton de modifications que vous avez obtenu précédemment et envoyez un appel getChanges avec le jeton. ChangesResponse renvoie une liste des modifications observées de Santé Connect, comme UpsertionChange et DeletionChange.

  /**
   * TODO: Retrieve changes from a Changes token.
   */
  suspend fun getChanges(token: String): Flow<ChangesMessage> = flow {
    var nextChangesToken = token
    do {
      val response = healthConnectClient.getChanges(nextChangesToken)
      if (response.changesTokenExpired) {
        throw IOException("Changes token has expired")
      }
      emit(ChangesMessage.ChangeList(response.changes))
      nextChangesToken = response.nextChangesToken
    } while (response.hasMore)
    emit(ChangesMessage.NoMoreChanges(nextChangesToken))
  }

Exécutez à présent l'application et accédez à l'écran des modifications. Activez d'abord le bouton Track changes (Suivre les modifications) pour obtenir un jeton de modifications. Ensuite, insérez des données de poids ou des séances d'exercice depuis la boîte à outils ou l'application de l'atelier de programmation. Revenez à l'écran de modifications, puis sélectionnez Get new changes (Recevoir les nouvelles modifications). Les modifications devraient maintenant s'afficher.

f3aded8ae5487e9c.png 437d69e3e000ce81.png

8. Données globales

Santé Connect fournit également des données globales via des API d'agrégation. Les exemples suivants vous montrent comment obtenir des données cumulées et statistiques à partir de Santé Connect.

Utilisez healthConnectClient.aggregate pour envoyer AggregateRequest. Dans la requête globale, spécifiez un ensemble de métriques agrégées et la période que vous souhaitez obtenir. Par exemple, ExerciseSessionRecord.EXERCISE_DURATION_TOTAL et StepsRecord.COUNT_TOTAL fournissent des données cumulées, tandis que WeightRecord.WEIGHT_AVG, HeartRateRecord.BPM_MAX et HeartRateRecord.BPM_MIN fournissent des données statistiques.

    /**
     * TODO: Returns the weekly average of [WeightRecord]s.
     */
    suspend fun computeWeeklyAverage(start: Instant, end: Instant): Mass? {
        val request = AggregateRequest(
            metrics = setOf(WeightRecord.WEIGHT_AVG),
            timeRangeFilter = TimeRangeFilter.between(start, end)
        )
        val response = healthConnectClient.aggregate(request)
        return response[WeightRecord.WEIGHT_AVG]
    }

Cet exemple montre comment obtenir les données globales associées à une séance d'exercice spécifique. Commencez par lire un enregistrement en utilisant healthConnectClient.readRecord avec un uid. Utilisez ensuite startTime et endTime de la séance d'exercice comme période et dataOrigin comme filtres pour lire les données globales associées.

  /**
   * TODO: Reads aggregated data and raw data for selected data types, for a given [ExerciseSessionRecord].
   */
  suspend fun readAssociatedSessionData(
      uid: String,
  ): ExerciseSessionData {
    val exerciseSession = healthConnectClient.readRecord(ExerciseSessionRecord::class, uid)
    // Use the start time and end time from the session, for reading raw and aggregate data.
    val timeRangeFilter = TimeRangeFilter.between(
      startTime = exerciseSession.record.startTime,
      endTime = exerciseSession.record.endTime
    )
    val aggregateDataTypes = setOf(
      ExerciseSessionRecord.EXERCISE_DURATION_TOTAL,
      StepsRecord.COUNT_TOTAL,
      TotalCaloriesBurnedRecord.ENERGY_TOTAL,
      HeartRateRecord.BPM_AVG,
      HeartRateRecord.BPM_MAX,
      HeartRateRecord.BPM_MIN,
    )
    // Limit the data read to just the application that wrote the session. This may or may not
    // be desirable depending on the use case: In some cases, it may be useful to combine with
    // data written by other apps.
    val dataOriginFilter = setOf(exerciseSession.record.metadata.dataOrigin)
    val aggregateRequest = AggregateRequest(
      metrics = aggregateDataTypes,
      timeRangeFilter = timeRangeFilter,
      dataOriginFilter = dataOriginFilter
    )
    val aggregateData = healthConnectClient.aggregate(aggregateRequest)
    val heartRateData = readData<HeartRateRecord>(timeRangeFilter, dataOriginFilter)

    return ExerciseSessionData(
      uid = uid,
      totalActiveTime = aggregateData[ExerciseSessionRecord.EXERCISE_DURATION_TOTAL],
      totalSteps = aggregateData[StepsRecord.COUNT_TOTAL],
      totalEnergyBurned = aggregateData[TotalCaloriesBurnedRecord.ENERGY_TOTAL],
      minHeartRate = aggregateData[HeartRateRecord.BPM_MIN],
      maxHeartRate = aggregateData[HeartRateRecord.BPM_MAX],
      avgHeartRate = aggregateData[HeartRateRecord.BPM_AVG],
      heartRateSeries = heartRateData,
    )
  }

Exécutons à présent l'application pour vérifier si vous pouvez voir le poids moyen sur l'écran Record weight (Enregistrer le poids). Vous pouvez également consulter les données détaillées d'une séance d'exercice en ouvrant l'écran Exercise séances (Séances d'exercice), puis en sélectionnant l'un des enregistrements de séance.

af1fe646159d6a60.png

9. Félicitations

Félicitations, vous venez de créer votre première application de santé et de remise en forme intégrée à Santé Connect.

L'application peut déclarer des autorisations et demander l'autorisation des utilisateurs pour les types de données qu'elle utilise. Elle peut également lire et écrire des données dans le stockage de données Santé Connect. Vous avez également appris à utiliser la boîte à outils Santé Connect pour faciliter le développement de votre application en créant des données fictives dans l'espace de stockage des données Santé Connect.

Vous connaissez maintenant les principales étapes nécessaires pour intégrer votre application de santé et de remise en forme à l'écosystème Santé Connect.

Complément d'informations