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

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

Этот рабочий процесс объединяет следующие 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 предлагают вам более глубокий взгляд на этот рабочий процесс.

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

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

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

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

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 затем собирает этот Flow как State Compose и воздействует на него:

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