Creare un'app per il fitness di base

Questa guida ti illustrerà come creare un'app contapassi per dispositivi mobili di base, che è una base comune per molte app per la salute e il fitness.

Questo flusso di lavoro integra le API seguenti:

  • SensorManager per recuperare i dati dei passi da un dispositivo mobile.
  • Stanza per l'archiviazione locale dei dati.
  • Connessione Salute per archiviare e condividere i dati relativi alla salute e all'attività fisica sul dispositivo.

Per ulteriore assistenza sulla lettura dei dati e sugli strumenti necessari, consulta Utilizzare Gestione sensori Android per monitorare i passi da un dispositivo mobile.

Se non hai già configurato il tuo ambiente di sviluppo per l'utilizzo di Connessione Salute, segui questi passaggi per iniziare.

Richiedi autorizzazioni sul dispositivo portatile

Prima di ottenere i dati sull'allenamento, devi richiedere e ottenere le autorizzazioni appropriate.

Come best practice, richiedi solo le autorizzazioni necessarie e assicurati di richiedere ogni autorizzazione nel contesto, anziché richiedere tutte le autorizzazioni contemporaneamente all'avvio dell'app da parte dell'utente.

Il sensore contapassi, utilizzato da molte app per l'allenamento, utilizza l'autorizzazione ACTIVITY_RECOGNITION. Aggiungi questa autorizzazione nel tuo file 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>

Per richiedere l'autorizzazione ACTIVITY_RECOGNITION in fase di runtime, consulta la documentazione relativa alla richiesta di autorizzazione.

Dovrai inoltre dichiarare un FOREGROUND_SERVICE nel file manifest. Dal momento che richiedi l'autorizzazione ACTIVITY_RECOGNITION, dichiara FOREGROUND_SERVICE_TYPE_HEALTH:

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

Visita la pagina Servizi in primo piano per scoprire di più sui servizi in primo piano e sui tipi di servizi in primo piano.

Gestione dello stato dell'UI utilizzando un ViewModel

Per gestire correttamente lo stato dell'UI, utilizza un modello ViewModel. Jetpack Compose e ViewModels, ti offre un quadro più approfondito di questo flusso di lavoro.

Inoltre, puoi usare la suddivisione in livelli dell'interfaccia utente, che è una parte fondamentale per creare UI con Compose e ti consente di seguire best practice per l'architettura, ad esempio il flusso di dati unidirezionale. Per ulteriori informazioni sulla disposizione in livelli dell'interfaccia utente, consulta la documentazione relativa al livello UI.

In questa app di esempio, la UI ha tre stati di base:

  • Caricamento: mostra un cerchio che gira.
  • Contenuti: mostra le informazioni sui tuoi passi per oggi.
  • Errore:viene mostrato un messaggio in caso di problemi.

L'ViewModel espone questi stati come un Flow Kotlin. Utilizza una classe chiusa per contenere le classi e gli oggetti che rappresentano i possibili stati:

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

La UI di Compose raccoglie quindi questo Flow come State di Compose e vi agisce:

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