یک اپلیکیشن تناسب اندام اولیه بسازید

این راهنما شما را در ساخت یک برنامه گام شمار اولیه موبایل راهنمایی می کند، که پایه و اساس مشترک بسیاری از برنامه های سلامت و تناسب اندام است.

این گردش کار 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 را در مانیفست اعلام کنید. از آنجایی که درخواست مجوز 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 and ViewModels نگاهی عمیق تر به این گردش کار به شما ارائه می دهد.

همچنین، از لایه‌بندی UI استفاده کنید، که بخش مهمی برای ساخت رابط‌های کاربری با Compose است و به شما امکان می‌دهد بهترین شیوه‌های معماری، مانند جریان داده‌های یک‌طرفه را دنبال کنید. برای کسب اطلاعات بیشتر در مورد لایه بندی UI، به مستندات لایه UI مراجعه کنید.

در این برنامه مثال، رابط کاربری سه حالت اساسی دارد:

  • بارگذاری: یک دایره در حال چرخش را نشان می دهد.
  • محتوا: اطلاعاتی را در مورد مراحل امروز شما نشان می دهد.
  • خطا: زمانی که مشکلی پیش می آید پیامی را نشان می دهد.

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 به عنوان Compose State جمع‌آوری می‌کند و بر اساس آن عمل می‌کند:

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