Eine einfache Fitness-App erstellen

In dieser Anleitung erfahren Sie, wie Sie eine einfache mobile Schrittzähler-App erstellen, die für viele Gesundheits- und Fitness-Apps eine übliche Grundlage ist.

In diesen Workflow sind die folgenden APIs eingebunden:

  • SensorManager zum Abrufen von Schrittdaten von einem Mobilgerät
  • Room für die lokale Datenspeicherung
  • Health Connect zum Speichern und Teilen von Gesundheits‑ und Fitnessdaten auf dem Gerät

Weitere Informationen zum Lesen von Daten und zu den erforderlichen Tools finden Sie unter Android Sensor Manager zum Erfassen von Schritten auf einem Mobilgerät verwenden.

Wenn Sie Ihre Entwicklungsumgebung noch nicht für die Verwendung von Health Connect eingerichtet haben, folgen Sie den Anleitungen in Erste Schritte mit Health Connect.

Berechtigungen auf einem Mobilgerät anfordern

Bevor Sie Trainingsdaten abrufen können, müssen Sie die entsprechenden Berechtigungen anfordern und erhalten.

Als Best Practice sollten Sie nur die Berechtigungen anfordern, die Sie benötigen, und jede Berechtigung im Kontext anfordern, anstatt alle Berechtigungen gleichzeitig anzufordern, wenn der Nutzer die App startet.

Der Schrittzähler-Sensor, auf den viele Trainings-Apps angewiesen sind, verwendet die Berechtigung ACTIVITY_RECOGNITION. Fügen Sie diese Berechtigung in Ihre Datei „AndroidManifest.xml“ ein:

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

Informationen zum Anfordern der Berechtigung ACTIVITY_RECOGNITION zur Laufzeit finden Sie in der Dokumentation zu Berechtigungsanfragen.

Sie müssen auch einen FOREGROUND_SERVICE im Manifest deklarieren. Da Sie die Berechtigung ACTIVITY_RECOGNITION anfordern, deklarieren Sie FOREGROUND_SERVICE_TYPE_HEALTH:

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

Weitere Informationen zu Diensten im Vordergrund und Arten von Diensten im Vordergrund finden Sie unter Dienste im Vordergrund.

UI-Status mit einem ViewModel verwalten

Verwenden Sie ein ViewModel, um den UI-Status richtig zu verwalten. Einen detaillierteren Einblick in diesen Workflow finden Sie unter Jetpack Compose und ViewModels.

Verwenden Sie außerdem UI-Layering. Das ist ein wichtiger Bestandteil beim Erstellen von UIs mit Compose und ermöglicht es Ihnen, Best Practices für die Architektur wie den unidirektionalen Datenfluss zu befolgen. Weitere Informationen zum UI-Layering finden Sie unter UI-Schicht.

In dieser Beispiel-App hat die UI drei grundlegende Status:

  • Loading: Es wird ein sich drehender Kreis angezeigt.
  • Content: Es werden Informationen zur Anzahl der Schritte am aktuellen Tag angezeigt.
  • Error: Wenn etwas schiefgeht, wird eine Meldung angezeigt.

Das ViewModel stellt diese Status als Kotlin-Flow bereit. Verwenden Sie eine versiegelte Klasse für die Klassen und Objekte, die die möglichen Status darstellen:

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

Die Compose-UI erfasst dann diesen Flow als Compose-State und reagiert darauf:

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