Eine einfache Fitness-App erstellen

In diesem Leitfaden erfahren Sie, wie Sie eine einfache mobile Schrittzähler-App erstellen, die eine häufige Grundlage für viele Gesundheits- und Fitness-Apps ist.

In diesen Workflow werden die folgenden APIs eingebunden:

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

Weitere Unterstützung beim Lesen von Daten und zu den erforderlichen Tools finden Sie unter Schritte mit dem Android Sensor Manager auf einem Mobilgerät erfassen.

Wenn Sie Ihre Entwicklungsumgebung noch nicht für die Verwendung von Health Connect eingerichtet haben, führen Sie diese ersten Schritte aus.

Berechtigungen auf Handheld-Gerät anfordern

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

Als Best Practice sollten Sie nur die erforderlichen Berechtigungen anfordern. Achten Sie außerdem darauf, jede Berechtigung im Kontext anzufordern, anstatt alle Berechtigungen gleichzeitig beim Starten der Anwendung anzufordern.

Der Schrittzählersensor, auf den viele Trainings-Apps angewiesen sind, verwendet die Berechtigung ACTIVITY_RECOGNITION. Fügen Sie die folgende Berechtigung in die 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 während der Laufzeit finden Sie in der Dokumentation zu Berechtigungsanfragen.

Außerdem musst du im Manifest ein FOREGROUND_SERVICE 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 zu Diensten im Vordergrund finden Sie unter Dienste im Vordergrund.

UI-Status mit einem ViewModel verwalten

Verwenden Sie zur ordnungsgemäßen Verwaltung des UI-Status ein ViewModel. Jetpack Compose und ViewModels bietet Ihnen einen detaillierten Einblick in diesen Workflow.

Verwenden Sie außerdem UI-Layering. Diese ist ein wichtiger Bestandteil beim Erstellen von UIs mit der Funktion „Compose“ und ermöglicht Ihnen, Best Practices für Architekturen wie den unidirektionalen Datenfluss zu befolgen. Weitere Informationen zum UI-Layering finden Sie in der Dokumentation zur UI-Ebene.

In dieser Beispielanwendung hat die Benutzeroberfläche drei Grundzustände:

  • Wird geladen: Ein sich drehender Kreis wird angezeigt.
  • Inhalt:Zeigt Informationen zu Ihren Schritten für heute an.
  • Fehler:Wenn ein Fehler auftritt, wird eine Meldung angezeigt.

Der ViewModel stellt diese Status als Kotlin-Flow bereit. Verwenden Sie eine versiegelte Klasse, um die Klassen und Objekte aufzunehmen, die die möglichen Zustände 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()
}

In der Erstellungs-UI wird dann diese Flow als State für das Schreiben erfasst und entsprechend verarbeitet:

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