In dieser Anleitung erfahren Sie, wie Sie eine einfache mobile Schrittzähler-App erstellen. Diese App ist eine häufige Grundlage für viele Gesundheits- und Fitness-Apps.
In diesen Workflow sind die folgenden APIs eingebunden:
- SensorManager zum Abrufen von Schrittdaten von einem Mobilgerät.
- Speicherplatz 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 für die Verwendung von Health Connect noch nicht eingerichtet haben, folgen Sie dieser Anleitung für die ersten Schritte.
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 eine 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. Jetpack Compose und ViewModels bietet einen detaillierteren Einblick in diesen Workflow.
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 zur UI-Ebene finden Sie in der Dokumentation zur UI-Ebene.
In dieser Beispiel-App hat die Benutzeroberfläche drei grundlegende Status:
- Wird geladen:Es wird ein sich drehender Kreis angezeigt.
- Inhalt:Hier findest du Informationen zu deinen Schritten für heute.
- Fehler:Hier wird eine Meldung angezeigt, wenn etwas schiefgeht.
Die ViewModel
stellt diese Status als Kotlin-Flow
bereit. Verwenden Sie eine versiegelte Klasse, um die Klassen und Objekte zu enthalten, 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()
}
Die Compose-Benutzeroberfläche erfasst dann diese Flow
als Compose-State
und reagiert darauf:
val state: TodayScreenState = todayScreenViewModel.currentScreenState.collectAsState().value