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