Creare un'app per il fitness di base

Questa guida ti illustra come creare un'app di base per il conteggio dei passi da mobile, che è una base comune per molte app per la salute e il fitness.

Questo flusso di lavoro integra le seguenti API:

  • SensorManager per recuperare i dati sui passi da un dispositivo mobile.
  • Room per l'archiviazione locale.
  • Connessione Salute per archiviare e condividere dati relativi a salute e fitness sul dispositivo.

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

Se non hai ancora configurato l'ambiente di sviluppo per l'utilizzo di Connessione Salute, segui questi passaggi per iniziare.

Richiedere le autorizzazioni sul dispositivo portatile

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

Come best practice, richiedi solo le autorizzazioni di cui hai bisogno e assicurati di richiedere ogni autorizzazione nel contesto, invece di richiedere tutte le autorizzazioni contemporaneamente quando l'utente avvia l'app.

Il sensore contapassi, su cui si basano molte app di allenamento, utilizza l'autorizzazione ACTIVITY_RECOGNITION. Aggiungi questa autorizzazione nel 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 sulla richiesta di autorizzazione.

Dovrai anche dichiarare un FOREGROUND_SERVICE nel manifest. Poiché stai richiedendo 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 saperne di più sui servizi in primo piano e sui tipi di servizi in primo piano.

Gestire lo stato della UI utilizzando un ViewModel

Per gestire correttamente lo stato della UI, utilizza un ViewModel. Jetpack Compose e ViewModels offre una visione più approfondita di questo flusso di lavoro.

Inoltre, utilizza la stratificazione della UI, che è una parte fondamentale per la creazione di UI con Compose e ti consente di seguire le best practice di architettura, come il flusso di dati unidirezionale. Per saperne di più sui livelli della UI, consulta la documentazione sui livelli della UI.

In questa app di esempio, l'interfaccia utente ha tre stati di base:

  • Caricamento:mostra un cerchio che gira.
  • Contenuti:mostra informazioni sui tuoi passi per oggi.
  • Errore:mostra un messaggio quando si verifica un problema.

ViewModel espone questi stati come Flow Kotlin. Utilizza una classe sigillata 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()
}

Compose UI raccoglie quindi questo Flow come State di Compose e lo utilizza:

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