Tworzenie podstawowej aplikacji do fitnessu

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