إنشاء تطبيق أساسي للياقة البدنية

يقدّم لك هذا الدليل خطوات إنشاء تطبيق أساسي على الأجهزة الجوّالة لحساب الخطوات، وهو أساس شائع للعديد من تطبيقات الصحة واللياقة البدنية.

يدمج سير العمل هذا واجهات برمجة التطبيقات التالية:

  • 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 نظرة أكثر تفصيلاً على سير العمل هذا.

استخدِم أيضًا ميزة &quot;الطبقات في واجهة المستخدم&quot;، وهي جزء مهم من إنشاء واجهات المستخدم باستخدام Compose، وتتيح لك اتّباع أفضل ممارسات التصميم، مثل تدفق البيانات في اتجاه واحد. لمزيد من المعلومات حول تقسيم واجهة المستخدم إلى طبقات، يُرجى الرجوع إلى مستندات طبقات واجهة المستخدم.

في هذا التطبيق النموذجي، تتضمّن واجهة المستخدم ثلاث حالات أساسية:

  • جارٍ التحميل: تعرض هذه الحالة دائرة متحركة.
  • المحتوى: يعرض معلومات حول خطواتك لهذا اليوم.
  • خطأ: يعرض رسالة عند حدوث خطأ.

تعرض 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()
}

تجمع واجهة Compose UI بعد ذلك Flow هذا كـ State في Compose وتتّخذ إجراءً بشأنه:

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