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

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

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

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

استخدِم أيضًا طبقات واجهة المستخدم، التي تشكّل جزءًا مهمًا من إنشاء واجهات المستخدم باستخدام 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 بعد ذلك عنصر Flow هذا كـ State وتتصرف وفقًا لها:

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