Créer une application de base de remise en forme

Ce guide vous explique comment créer une application de base de compteur de pas mobile, qui constitue une base courante pour de nombreuses applications de santé et de remise en forme.

Ce workflow intègre les API suivantes :

  • SensorManager pour récupérer les données de pas d'un appareil mobile.
  • Room pour le stockage local des données.
  • Santé Connect pour stocker et partager des données de santé et de remise en forme sur l'appareil.

Pour obtenir de l'aide supplémentaire sur la lecture des données et les outils nécessaires, consultez Utiliser le gestionnaire de capteurs Android pour suivre les pas depuis un appareil mobile.

Si vous n'avez pas encore configuré votre environnement de développement pour utiliser Santé Connect, suivez ces étapes de prise en main.

Demander des autorisations sur un appareil mobile

Avant d'obtenir des données d'exercice, vous devez demander et obtenir les autorisations appropriées.

Nous vous recommandons de ne demander que les autorisations dont vous avez besoin et de vous assurer de demander chaque autorisation en contexte, au lieu de demander toutes les autorisations en même temps lorsque l'utilisateur démarre l'application.

Le capteur de pas, sur lequel s'appuient de nombreuses applications d'exercice, utilise l'autorisation ACTIVITY_RECOGNITION. Ajoutez cette autorisation dans votre fichier AndroidManifest.xml :

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:tools="http://schemas.android.com/tools">

  <uses-permission android:name="android.permission.ACTIVITY_RECOGNITION"/>

</manifest>

Pour demander l'autorisation ACTIVITY_RECOGNITION au moment de l'exécution, consultez la documentation sur les demandes d'autorisation.

Vous devrez également déclarer un FOREGROUND_SERVICE dans le fichier manifeste. Étant donné que vous demandez l'autorisation ACTIVITY_RECOGNITION, déclarez FOREGROUND_SERVICE_TYPE_HEALTH :

<uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_HEALTH"/>

Consultez Services de premier plan pour en savoir plus sur les services de premier plan et leurs types.

Gérer l'état de l'UI à l'aide d'un ViewModel

Pour gérer correctement l'état de l'UI, utilisez un ViewModel. Jetpack Compose et ViewModels vous offre un aperçu plus détaillé de ce workflow.

Utilisez également la superposition d'UI, qui est essentielle pour créer des UI avec Compose et vous permet de suivre les bonnes pratiques d'architecture, telles que le flux de données unidirectionnel. Pour en savoir plus sur la superposition de l'UI, consultez la documentation sur la couche d'UI.

Dans cet exemple d'application, l'UI comporte trois états de base :

  • Chargement : un cercle en rotation s'affiche.
  • Contenu : affiche des informations sur vos pas pour aujourd'hui.
  • Erreur : affiche un message en cas de problème.

ViewModel expose ces états sous la forme d'un Flow Kotlin. Utilisez une classe scellée pour contenir les classes et les objets qui représentent les états possibles :

class TodayScreenViewModel(...) {

  val currentScreenState: MutableStateFlow<TodayScreenState> = MutableStateFlow(Loading)

  [...]

}

sealed class TodayScreenState {
    data object Loading : TodayScreenState()
    data class Content(val steps: Long, val dailyGoal: Long) : TodayScreenState()
    data object Error: TodayScreenState()
}

L'UI Compose collecte ensuite ce Flow en tant que State Compose et agit en conséquence :

val state: TodayScreenState = todayScreenViewModel.currentScreenState.collectAsState().value