Tworzenie podstawowej aplikacji do fitnessu

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