Создайте базовое фитнес-приложение

Это руководство поможет вам создать простое мобильное приложение-счетчик шагов, которое является общей основой для многих приложений для здоровья и фитнеса.

Этот рабочий процесс интегрирует следующие API:

  • SensorManager для получения данных о шагах с мобильного устройства.
  • Место для локального хранения данных.
  • Health Connect для хранения и обмена данными о здоровье и фитнесе на устройстве.

Дополнительную поддержку по считыванию данных и необходимым инструментам см. в статье Использование Android Sensor Manager для отслеживания шагов с мобильного устройства .

Если вы еще не настроили среду разработки для использования Health Connect , выполните следующие шаги по началу работы .

Запросить разрешения на портативном устройстве

Перед получением данных об упражнениях вам необходимо запросить и получить соответствующие разрешения.

Лучше всего запрашивать только те разрешения, которые вам необходимы, и запрашивать каждое разрешение в контексте , а не запрашивать все разрешения сразу, когда пользователь запускает приложение.

Датчик счётчика шагов , используемый многими приложениями для тренировок, использует разрешение ACTIVITY_RECOGNITION . Добавьте это разрешение в файл 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>

Чтобы запросить разрешение ACTIVITY_RECOGNITION во время выполнения, обратитесь к документации по запросу разрешений .

Вам также потребуется объявить FOREGROUND_SERVICE в манифесте. Поскольку вы запрашиваете разрешение ACTIVITY_RECOGNITION , объявите FOREGROUND_SERVICE_TYPE_HEALTH :

<uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_HEALTH"/>

Посетите раздел Службы переднего плана , чтобы узнать больше о службах переднего плана и типах служб переднего плана.

Управление состоянием пользовательского интерфейса с помощью ViewModel

Для правильного управления состоянием пользовательского интерфейса используйте ViewModel. Jetpack Compose и ViewModels предлагают более подробное описание этого рабочего процесса.

Кроме того, используйте многоуровневый интерфейс (UI), который является критически важным компонентом создания UI с помощью Compose и позволяет следовать лучшим архитектурным практикам, таким как однонаправленный поток данных . Подробнее о многоуровневом интерфейсе см. в документации по UI-слоям .

В этом примере приложения пользовательский интерфейс имеет три основных состояния:

  • Загрузка: показывает вращающийся круг.
  • Содержание: Показывает информацию о ваших шагах за сегодня.
  • Ошибка: выводит сообщение, если что-то идет не так.

ViewModel представляет эти состояния как Flow Kotlin. Используйте запечатанный класс для хранения классов и объектов, представляющих возможные состояния:

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()
}

Затем Compose UI собирает этот Flow как State Compose и выполняет следующие действия:

val state: TodayScreenState = todayScreenViewModel.currentScreenState.collectAsState().value