פיתוח אפליקציית כושר בסיסית

במדריך הזה מוסבר איך ליצור אפליקציה בסיסית של מונה שלבים לנייד, היא הבסיס המשותף אפליקציות כושר.

תהליך העבודה הזה משלב את ממשקי ה-API הבאים:

  • SensorManager לאחזור נתוני שלבים ממכשיר נייד.
  • חדר לאחסון נתונים מקומי.
  • Health Connect לאחסון ושיתוף של נתוני הבריאות והכושר במכשיר.

לקבלת תמיכה נוספת בקריאת נתונים ובכלים הדרושים, אפשר לקרוא את המאמר שימוש מנהל החיישנים של Android למעקב אחר שלבים ממכשיר נייד.

אם עדיין לא הגדרתם את סביבת הפיתוח לשימוש Health Connect, צריך לפעול לפי ההנחיות הבאות איך מתחילים לבצע מיליון שלבים.

בקשת הרשאות במכשיר נייד

לפני קבלת נתוני תרגול, עליך לבקש ולקבל את הרשאות.

מומלץ לבקש רק את ההרשאות הדרושות ולהקפיד לבקש כל הרשאה בהקשר המתאים, במקום לבקש את כל בו-זמנית כשהמשתמש מפעיל את האפליקציה.

חיישן מונה הצעדים, שעליו מסתמכות אפליקציות רבות של פעילות גופנית, משתמש הרשאת ACTIVITY_RECOGNITION. יש להוסיף את ההרשאה הזו בקובץ AndroidManifest.xml file:

<?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 פיתוח נייטיב ו-ViewModels מאפשר לכם לראות יותר לעומק בתהליך העבודה.

כדאי גם להשתמש בשכבות של ממשק המשתמש, שהן חלק קריטי לפיתוח ממשקי משתמש עם ההצעות לכתיבה ומאפשרת לכם לפעול לפי שיטות מומלצות לארכיטקטורה, זרימת נתונים חד-כיוונית. למידע נוסף על יצירת שכבות בממשק המשתמש, אפשר לקרוא את מסמכי תיעוד של שכבת ממשק המשתמש.

באפליקציה לדוגמה הזו, לממשק המשתמש יש שלושה מצבים בסיסיים:

  • טעינה: מציג עיגול מסתובב.
  • תוכן: הצגת מידע על השלבים שביצעתם היום.
  • שגיאה: תוצג הודעה כשמשהו משתבש.

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

לאחר מכן, ממשק המשתמש של הכתיבה אוסף את הFlow הזה בתור State של כתיבה ופועל עליו:

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