Ten przewodnik przeprowadzi Cię przez proces tworzenia podstawowej aplikacji do liczenia kroków na urządzeniu mobilnym, która jest często wykorzystywana w wielu aplikacjach związanych ze zdrowiem i aktywnością fizyczną.
Ten przepływ pracy integruje te interfejsy API:
- SensorManager do pobierania danych o krokach z urządzenia mobilnego.
- Miejsce na lokalne przechowywanie danych.
- Health Connect do przechowywania i udostępniania danych o zdrowiu i aktywności fizycznej na urządzeniu.
Dodatkowe informacje o odczytywaniu danych i niezbędnych narzędziach znajdziesz w artykule Śledzenie kroków na urządzeniu mobilnym za pomocą Menedżera czujników Androida.
Jeśli nie masz jeszcze skonfigurowanego środowiska programistycznego do korzystania z Health Connect, wykonaj te czynności na początek.
Prośba o uprawnienia na urządzeniu przenośnym
Zanim uzyskasz dane o aktywności, musisz poprosić o odpowiednie uprawnienia i je otrzymać.
Zgodnie ze sprawdzoną metodą proś o tylko te uprawnienia, których potrzebujesz, i proś o każde uprawnienie w kontekście, zamiast prosić o wszystkie uprawnienia naraz, gdy użytkownik uruchamia aplikację.
Czujnik kroków, z którego korzysta wiele aplikacji do ćwiczeń, używa 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 poprosić o uprawnienie ACTIVITY_RECOGNITION
w czasie działania, zapoznaj się z dokumentacją dotyczącą próśb o uprawnienia.
W pliku manifestu musisz też zadeklarować FOREGROUND_SERVICE
. 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 Usługi działające na pierwszym planie.
Zarządzanie stanem interfejsu za pomocą ViewModel
Aby prawidłowo zarządzać stanem interfejsu, użyj ViewModelu. Więcej informacji o tym przepływie pracy znajdziesz w artykule Jetpack Compose i ViewModel.
Korzystaj też z warstw interfejsu, które są kluczowym elementem tworzenia interfejsów za pomocą Compose i umożliwiają stosowanie sprawdzonych metod architektury, takich jak jednokierunkowy przepływ danych. Więcej informacji o warstwach interfejsu znajdziesz w dokumentacji warstwy interfejsu.
W tej przykładowej aplikacji interfejs użytkownika ma 3 podstawowe stany:
- Wczytywanie: wyświetla obracające się kółko.
- Treść: wyświetla informacje o krokach zrobionych dzisiaj.
- Błąd: wyświetla komunikat, gdy coś pójdzie nie tak.
ViewModel
udostępnia te stany jako Flow
w języku Kotlin. Użyj klasy zapieczętowanej, aby zawierała klasy i obiekty reprezentujące 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 Compose zbiera następnie te informacje Flow
jako State
i wykonuje odpowiednie działania:
val state: TodayScreenState = todayScreenViewModel.currentScreenState.collectAsState().value