คู่มือนี้จะอธิบายถึงวิธีการสร้างแอปนับก้าวเบื้องต้นบนอุปกรณ์เคลื่อนที่ เป็นรากฐานสำคัญสำหรับ แอปฟิตเนส
เวิร์กโฟลว์นี้จะผสานรวม 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