สร้างแอปฟิตเนสขั้นพื้นฐาน

คู่มือนี้จะอธิบายถึงวิธีการสร้างแอปนับก้าวเบื้องต้นบนอุปกรณ์เคลื่อนที่ เป็นรากฐานสำคัญสำหรับ แอปฟิตเนส

เวิร์กโฟลว์นี้จะผสานรวม API ต่อไปนี้

  • SensorManager ในการเรียกข้อมูลขั้นตอนจากอุปกรณ์เคลื่อนที่
  • ห้องสำหรับพื้นที่เก็บข้อมูลในเครื่อง
  • Health Connect สำหรับจัดเก็บและแชร์ข้อมูลสุขภาพและการออกกำลังกายในอุปกรณ์

สำหรับการสนับสนุนเพิ่มเติมเกี่ยวกับการอ่านข้อมูลและเครื่องมือที่จำเป็น โปรดดูที่การใช้งาน ตัวจัดการเซ็นเซอร์ของ Android เพื่อติดตามจำนวนก้าวจากอุปกรณ์เคลื่อนที่

หากคุณยังไม่ได้ตั้งค่าสภาพแวดล้อมในการพัฒนาซอฟต์แวร์เพื่อใช้งาน 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 ในไฟล์ Manifest ด้วย เนื่องจากคุณ กำลังขอสิทธิ์ACTIVITY_RECOGNITION โปรดประกาศ FOREGROUND_SERVICE_TYPE_HEALTH:

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

ไปที่บริการที่ทำงานอยู่เบื้องหน้า เพื่อดูข้อมูลเพิ่มเติมเกี่ยวกับบริการที่ทำงานอยู่เบื้องหน้าและประเภทบริการที่ทำงานอยู่เบื้องหน้า

จัดการสถานะ UI โดยใช้ ViewModel

ใช้ ViewModel เพื่อจัดการสถานะ UI อย่างเหมาะสม Jetpack Compose และ ViewModels ช่วยให้คุณเห็นข้อมูลเชิงลึกเกี่ยวกับเรื่องนี้อย่างละเอียด

นอกจากนี้ ให้ใช้การแบ่งชั้น UI ซึ่งเป็นส่วนสำคัญในการสร้าง UI ด้วยการเขียน และช่วยให้คุณทำตามแนวทางปฏิบัติแนะนำด้านสถาปัตยกรรม เช่น โฟลว์ข้อมูลแบบทิศทาง หากต้องการเรียนรู้เพิ่มเติมเกี่ยวกับการสร้างเลเยอร์ UI โปรดดู เอกสารประกอบเกี่ยวกับเลเยอร์ UI

ในแอปตัวอย่างนี้ UI มีสถานะพื้นฐาน 3 สถานะดังนี้

  • กำลังโหลด: แสดงวงกลมหมุน
  • เนื้อหา: แสดงข้อมูลเกี่ยวกับจำนวนก้าวของวันนี้
  • ข้อผิดพลาด: แสดงข้อความเมื่อเกิดข้อผิดพลาด

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

จากนั้น UI ของ Compose จะรวบรวม Flow นี้เป็น State ของ Compose และจะดำเนินการในนั้น:

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