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