建構基本健身應用程式

本指南會逐步引導您建立基本的行動步數計數器應用程式 是許多健康和動力的共同基礎健身應用程式。

此工作流程整合了下列 API:

  • SensorManager,用於從行動裝置擷取步數資料。
  • 用於本機資料儲存空間的 Room
  • Health Connect 可在裝置上儲存及分享健康與健身資料。

如需有關資料讀取和必要工具的進一步支援,請參閱「運用方式 使用 Android 感應器管理員,在行動裝置上追蹤步數

如果您尚未設定使用 Health Connect,請按照下列指示操作 開始使用 100 萬步的訓練

透過手持裝置要求權限

您必須先要求並取得適當的資料,才能取得運動資料 授予其要求的權限。

最佳做法是只要求需要的權限,並確保 在相關情境中要求每項權限,而不是要求所有權限。 授予這項權限。

許多運動應用程式都仰賴的步數計數器感應器 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 管理 UI 狀態

如要妥善管理 UI 狀態,請使用 ViewModel。 Jetpack Compose 和 ViewModel 可讓您深入瞭解 工作流程

此外,請使用 UI 分層,這是使用 Compose 建構 UI 中重要的一環 並可讓您遵循架構最佳做法,例如 單向資料流。如要進一步瞭解 UI 分層,請參閱 UI 層說明文件

在這個範例應用程式中,UI 有三種基本狀態:

  • 載入中:顯示旋轉的圓圈。
  • 內容:顯示您今天步數的相關資訊。
  • 錯誤:在發生問題時顯示訊息。

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 UI 隨即會將這個 Flow 收集為 Compose State 並對其執行操作:

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