Crea una app de fitness básica

En esta guía, se explica cómo crear una aplicación básica de contador de pasos para dispositivos móviles, que es una base común para muchas empresas de salud y Apps de fitness.

Este flujo de trabajo integra las siguientes APIs:

  • SensorManager para recuperar datos de pasos de un dispositivo móvil
  • Room para almacenar datos locales
  • Health Connect para almacenar y compartir datos de salud y actividad física en el dispositivo.

Para obtener asistencia adicional sobre la lectura de datos y las herramientas necesarias, consulta Uso Android Sensor Manager para registrar los pasos desde un dispositivo móvil

Si aún no has configurado tu entorno de desarrollo Health Connect, sigue estos pasos. cómo comenzar pasos.

Cómo solicitar permisos en el dispositivo de mano

Antes de obtener datos de ejercicio, debes solicitar y recibir los permisos permisos.

Como práctica recomendada, solicita solo los permisos que necesitas y asegúrate de solicitar cada permiso en contexto, en lugar de solicitar todos permisos a la vez cuando el usuario inicia la aplicación.

El sensor del contador de pasos, del que dependen muchas apps de ejercicios, usa el el permiso ACTIVITY_RECOGNITION. Agrega este permiso en tu AndroidManifest.xml archivo:

<?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>

Para solicitar el permiso ACTIVITY_RECOGNITION durante el tiempo de ejecución, consulta la documentación de la solicitud de permisos.

También deberás declarar un FOREGROUND_SERVICE en el manifiesto. Ya que solicitan el permiso ACTIVITY_RECOGNITION, declara FOREGROUND_SERVICE_TYPE_HEALTH

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

Visita Servicios en primer plano. para obtener más información sobre los servicios en primer plano y los tipos de servicios en primer plano.

Cómo administrar el estado de la IU con un ViewModel

Para administrar correctamente el estado de la IU, usa un ViewModel. Jetpack Compose y ViewModels te ofrecen una explicación más detallada de esto. en el flujo de trabajo.

Además, usa capas de IU, que son fundamentales para compilar IUs con Compose. y te permite seguir las prácticas recomendadas de la arquitectura, Flujo unidireccional de datos. Para obtener más información sobre las capas de IU, consulta el Documentación de la capa de la IU.

En esta app de ejemplo, la IU tiene tres estados básicos:

  • Cargando: Muestra un círculo que gira.
  • Contenido: Muestra información sobre los pasos que diste para hoy.
  • Error: Muestra un mensaje cuando se produce un error.

El ViewModel expone estos estados como un Flow de Kotlin. Usa una clase sellada para contienen las clases y los objetos que representan los estados posibles:

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

Luego, la IU de Compose recopila este Flow como un State de Compose y actúa en él:

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