W tym przewodniku pokazujemy, jak utworzyć podstawową aplikację mobilną z licznikiem kroków, która jest podstawowym elementem wielu aplikacji z kategorii Zdrowie i fitness.
Ten przepływ pracy integruje te interfejsy API:
- SensorManager do pobierania danych kroków z urządzenia mobilnego.
- Sala na dane lokalne.
- Health Connect – służy do przechowywania i udostępniania danych o zdrowiu i aktywności fizycznej na urządzeniu.
Dodatkową pomoc dotyczącą odczytu danych i potrzebnych narzędzi znajdziesz w artykule Monitorowanie kroków na urządzeniu mobilnym za pomocą Menedżera czujników w Androidzie.
Jeśli nie masz jeszcze skonfigurowanego środowiska programistycznego do korzystania z Health Connect, wykonaj te czynności wprowadzające.
Prośba o uprawnienia na urządzeniu mobilnym
Przed uzyskaniem danych związanych z ćwiczeniami musisz poprosić o odpowiednie uprawnienia.
Zgodnie ze sprawdzoną metodą proś tylko o te uprawnienia, których potrzebujesz, i pamiętaj, aby prosić o każde uprawnienie w kontekście, zamiast prosić o wszystkie uprawnienia od razu po uruchomieniu aplikacji przez użytkownika.
Czujnik licznika kroków, z którego korzysta wiele aplikacji do ćwiczeń, korzysta z uprawnienia ACTIVITY_RECOGNITION
. Dodaj to uprawnienie w pliku 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>
Aby dowiedzieć się, jak poprosić o uprawnienie ACTIVITY_RECOGNITION
w czasie działania, zapoznaj się z dokumentacją próśb o uprawnienia.
FOREGROUND_SERVICE
musisz też zadeklarować w pliku manifestu. Ponieważ prosisz o uprawnienie ACTIVITY_RECOGNITION
, zadeklaruj FOREGROUND_SERVICE_TYPE_HEALTH
:
<uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_HEALTH"/>
Więcej informacji o usługach działających na pierwszym planie i ich typach znajdziesz w artykule o usługach działających na pierwszym planie.
Zarządzanie stanem interfejsu użytkownika za pomocą modelu ViewModel
Aby prawidłowo zarządzać stanem interfejsu użytkownika, użyj obiektu ViewModel. Jetpack Compose i ViewModels umożliwiają bardziej szczegółowy wgląd w ten przepływ pracy.
Możesz też korzystać z warstwowania interfejsu, które jest kluczowym elementem tworzenia interfejsów użytkownika z opcją tworzenia wiadomości i pozwala postępować zgodnie ze sprawdzonymi metodami dotyczącymi architektury, takimi jak jednokierunkowy przepływ danych. Więcej informacji o warstwach interfejsu znajdziesz w dokumentacji warstwy UI.
W tej przykładowej aplikacji interfejs użytkownika ma 3 podstawowe stany:
- Wczytywanie: pokazuje obracający się okrąg.
- Treść: pokazuje informacje o dzisiejszej liczbie kroków.
- Błąd:wyświetla komunikat, gdy coś pójdzie nie tak.
Element ViewModel
ujawnia te stany jako Flow
Kotlin. Użyj klasy i obiektów, które reprezentują możliwe stany:
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()
}
Interfejs użytkownika tworzenia gromadzi wówczas element Flow
jako element State
tworzenia i wykonuje w nim działanie:
val state: TodayScreenState = todayScreenViewModel.currentScreenState.collectAsState().value