انواع خدمات پیش زمینه

از اندروید ۱۴ (سطح API ۳۴)، شما باید برای هر سرویس پیش‌زمینه، یک نوع سرویس مناسب تعریف کنید. این یعنی باید نوع سرویس را در مانیفست برنامه خود تعریف کنید و همچنین مجوز سرویس پیش‌زمینه مناسب را برای آن نوع درخواست کنید (علاوه بر درخواست مجوز FOREGROUND_SERVICE ). علاوه بر این، بسته به نوع سرویس پیش‌زمینه، ممکن است قبل از راه‌اندازی سرویس، مجبور شوید مجوزهای زمان اجرا را نیز درخواست کنید.

دوربین

نوع سرویس پیش‌زمینه برای اعلام در مانیفست تحت android:foregroundServiceType
camera
اجازه اعلان در مانیفست شما
FOREGROUND_SERVICE_CAMERA
ثابتی که باید به startForeground() ارسال شود
FOREGROUND_SERVICE_TYPE_CAMERA
پیش‌نیازهای زمان اجرا

درخواست و دریافت مجوز زمان اجرای CAMERA

توضیحات

همچنان از پس‌زمینه به دوربین دسترسی داشته باشید، مانند برنامه‌های چت تصویری که امکان چندوظیفگی را فراهم می‌کنند.

دستگاه متصل

نوع سرویس پیش زمینه برای اعلام در مانیفست در زیر
android:foregroundServiceType
connectedDevice
اجازه اعلام در مانیفست شما
FOREGROUND_SERVICE_CONNECTED_DEVICE
ثابت برای عبور به startForeground()
FOREGROUND_SERVICE_TYPE_CONNECTED_DEVICE
پیش نیازهای زمان اجرا

حداقل یکی از شرایط زیر باید درست باشد:

توضیحات

تعامل با دستگاه های خارجی که به بلوتوث، NFC، IR، USB یا اتصال شبکه نیاز دارند.

جایگزین ها

اگر برنامه شما نیاز به انتقال مداوم داده به یک دستگاه خارجی دارد، به جای آن از مدیر دستگاه همراه استفاده کنید. از API حضور دستگاه همراه استفاده کنید تا به برنامه شما کمک کند تا زمانی که دستگاه همراه در محدوده است در حال اجرا بماند.

اگر برنامه شما نیاز به اسکن دستگاه‌های بلوتوث دارد، به جای آن از API اسکن بلوتوث استفاده کنید.

همگام‌سازی داده‌ها

نوع سرویس پیش‌زمینه برای اعلام در مانیفست زیر
android:foregroundServiceType
dataSync
اجازه اعلان در مانیفست شما
FOREGROUND_SERVICE_DATA_SYNC
ثابتی که باید به startForeground() ارسال شود
FOREGROUND_SERVICE_TYPE_DATA_SYNC
پیش‌نیازهای زمان اجرا
هیچکدام
توضیحات

عملیات انتقال داده، مانند موارد زیر:

  • آپلود یا دانلود داده
  • عملیات پشتیبان‌گیری و بازیابی
  • عملیات واردات یا صادرات
  • واکشی داده‌ها
  • پردازش فایل محلی
  • انتقال داده‌ها بین یک دستگاه و فضای ابری از طریق شبکه
جایگزین‌ها

برای اطلاعات دقیق‌تر، به جایگزین‌های سرویس‌های همگام‌سازی داده‌ها در پس‌زمینه مراجعه کنید.

سلامت

نوع سرویس پیش زمینه برای اعلام در مانیفست در زیر
android:foregroundServiceType
health
اجازه اعلام در مانیفست شما
FOREGROUND_SERVICE_HEALTH
ثابت برای عبور به startForeground()
FOREGROUND_SERVICE_TYPE_HEALTH
پیش نیازهای زمان اجرا

حداقل یکی از شرایط زیر باید درست باشد:

توضیحات

هر گونه موارد استفاده طولانی مدت برای پشتیبانی از برنامه های دسته تناسب اندام مانند ردیاب های ورزشی.

مکان

نوع سرویس پیش زمینه برای اعلام در مانیفست در زیر
android:foregroundServiceType
location
اجازه اعلام در مانیفست شما
FOREGROUND_SERVICE_LOCATION
ثابت برای عبور به startForeground()
FOREGROUND_SERVICE_TYPE_LOCATION
پیش نیازهای زمان اجرا

کاربر باید خدمات موقعیت مکانی را فعال کرده باشد و به برنامه باید حداقل یکی از مجوزهای زمان اجرا زیر اعطا شود:

توضیحات

موارد استفاده طولانی مدت که نیاز به دسترسی به موقعیت مکانی دارند، مانند ناوبری و اشتراک گذاری مکان.

جایگزین ها

اگر برنامه شما باید زمانی که کاربر به مکان های خاصی می رسد فعال شود، به جای آن از geofence API استفاده کنید.

رسانه

نوع سرویس پیش‌زمینه برای اعلام در مانیفست زیر
android:foregroundServiceType
mediaPlayback
اجازه اعلان در مانیفست شما
FOREGROUND_SERVICE_MEDIA_PLAYBACK
ثابتی که باید به startForeground() ارسال شود
FOREGROUND_SERVICE_TYPE_MEDIA_PLAYBACK
پیش‌نیازهای زمان اجرا
هیچکدام
توضیحات

پخش صدا یا تصویر را از پس‌زمینه ادامه دهید. از قابلیت ضبط ویدیوی دیجیتال (DVR) در تلویزیون اندروید پشتیبانی کنید.

جایگزین‌ها

اگر ویدیوی تصویر در تصویر را نمایش می‌دهید، از حالت تصویر در تصویر استفاده کنید.

پردازش رسانه

نوع سرویس پیش زمینه برای اعلام در مانیفست در زیر
android:foregroundServiceType
mediaProcessing
اجازه اعلام در مانیفست شما
FOREGROUND_SERVICE_MEDIA_PROCESSING
ثابت برای عبور به startForeground()
FOREGROUND_SERVICE_TYPE_MEDIA_PROCESSING
پیش نیازهای زمان اجرا
هیچ کدام
توضیحات

سرویسی برای انجام عملیات زمان بر روی دارایی های رسانه، مانند تبدیل رسانه به فرمت های مختلف. سیستم به این سرویس اجازه می دهد مدت زمان محدودی اجرا شود. در شرایط عادی، این محدودیت زمانی 6 ساعت از هر 24 ساعت خواهد بود. (این محدودیت توسط همه سرویس‌های پیش‌زمینه mediaProcessing برنامه مشترک است.)

برنامه شما باید به صورت دستی سرویس پردازش رسانه را در سناریوی زیر متوقف کند:

  • هنگامی که عملیات رمزگذاری به پایان رسید یا به حالت شکست رسید، از سرویس بخواهید که Service.stopForeground() و Service.stopSelf() را فراخوانی کند تا سرویس به طور کامل متوقف شود.

در صورت رسیدن به دوره زمانی، سیستم روش Service.onTimeout(int, int) سرویس را فراخوانی می کند. در این زمان، سرویس چند ثانیه فرصت دارد تا Service.stopSelf() را فراخوانی کند. اگر سرویس Service.stopSelf() را فراخوانی نکند، یک ANR با این پیغام خطا رخ می دهد: "یک سرویس پیش زمینه <fgs_type> در مدت زمان توقف خود متوقف نشد: <component_name> ".

توجه : Service.onTimeout(int, int) در اندروید 14 یا پایین‌تر در دسترس نیست. در دستگاه‌هایی که این نسخه‌ها را اجرا می‌کنند، اگر یک سرویس پردازش رسانه به دوره زمانی پایان برسد، سیستم بلافاصله برنامه را در حافظه پنهان ذخیره می‌کند. به همین دلیل، برنامه شما نباید منتظر دریافت اعلان مهلت باشد. در عوض، باید سرویس پیش زمینه را خاتمه دهد یا در اسرع وقت آن را به سرویس پس زمینه تغییر دهد.

طرح‌ریزی رسانه‌ای

نوع سرویس پیش‌زمینه برای اعلام در مانیفست زیر
android:foregroundServiceType
mediaProjection
اجازه اعلان در مانیفست شما
FOREGROUND_SERVICE_MEDIA_PROJECTION
ثابتی که باید به startForeground() ارسال شود
FOREGROUND_SERVICE_TYPE_MEDIA_PROJECTION
پیش‌نیازهای زمان اجرا

قبل از شروع سرویس پیش‌زمینه، متد createScreenCaptureIntent() را فراخوانی کنید. انجام این کار یک اعلان مجوز به کاربر نشان می‌دهد؛ کاربر باید قبل از ایجاد سرویس، مجوز را اعطا کند.

پس از ایجاد سرویس پیش‌زمینه، می‌توانید MediaProjectionManager.getMediaProjection() را فراخوانی کنید.

توضیحات

با استفاده از APIهای MediaProjection ، محتوا را به نمایشگر غیر اصلی یا دستگاه خارجی منتقل کنید. این محتوا لزوماً نباید منحصراً محتوای رسانه‌ای باشد.

جایگزین‌ها

برای پخش رسانه به دستگاه دیگر، از Google Cast SDK استفاده کنید.

میکروفون

نوع سرویس پیش‌زمینه برای اعلام در مانیفست زیر
android:foregroundServiceType
microphone
اجازه اعلان در مانیفست شما
FOREGROUND_SERVICE_MICROPHONE
ثابتی که باید به startForeground() ارسال شود
FOREGROUND_SERVICE_TYPE_MICROPHONE
پیش‌نیازهای زمان اجرا

درخواست و دریافت مجوز زمان اجرای RECORD_AUDIO .

توضیحات

ضبط میکروفون را از پس‌زمینه، مانند ضبط صدا یا برنامه‌های ارتباطی، ادامه دهید.

تماس تلفنی

نوع سرویس پیش‌زمینه برای اعلام در مانیفست زیر
android:foregroundServiceType
phoneCall
اجازه اعلان در مانیفست شما
FOREGROUND_SERVICE_PHONE_CALL
ثابتی که باید به startForeground() ارسال شود
FOREGROUND_SERVICE_TYPE_PHONE_CALL
پیش‌نیازهای زمان اجرا

حداقل یکی از این شرایط باید صادق باشد:

  • برنامه در فایل مانیفست خود، مجوز MANAGE_OWN_CALLS را اعلام کرده است.
  • برنامه از طریق نقش ROLE_DIALER برنامه شماره‌گیر پیش‌فرض است.
توضیحات

با استفاده از APIهای ConnectionService ، یک تماس مداوم را ادامه دهید.

جایگزین‌ها

اگر نیاز به برقراری تماس تلفنی، ویدیویی یا VoIP دارید، استفاده از کتابخانه android.telecom را در نظر بگیرید.

استفاده از CallScreeningService را برای غربالگری تماس‌ها در نظر بگیرید.

پیام‌رسانی از راه دور

نوع سرویس پیش زمینه برای اعلام در مانیفست در زیر
android:foregroundServiceType
remoteMessaging
اجازه اعلام در مانیفست شما
FOREGROUND_SERVICE_REMOTE_MESSAGING
ثابت برای عبور به startForeground()
FOREGROUND_SERVICE_TYPE_REMOTE_MESSAGING
پیش نیازهای زمان اجرا
هیچ کدام
توضیحات
پیام های متنی را از یک دستگاه به دستگاه دیگر منتقل کنید. به تداوم وظایف پیام رسانی کاربر هنگام تعویض دستگاه کمک می کند.

خدمات کوتاه

نوع سرویس پیش زمینه برای اعلام در مانیفست در زیر
android:foregroundServiceType
shortService
اجازه اعلام در مانیفست شما
هیچ کدام
ثابت برای عبور به startForeground()
FOREGROUND_SERVICE_TYPE_SHORT_SERVICE
پیش نیازهای زمان اجرا
هیچ کدام
توضیحات

کارهای مهمی را که نمی توان آن ها را قطع یا به تعویق انداخت، به سرعت به پایان برسانید.

این نوع دارای ویژگی های منحصر به فردی است:

  • فقط می تواند برای مدت زمان کوتاهی (حدود 3 دقیقه) اجرا شود.
  • بدون پشتیبانی از خدمات پیش زمینه چسبنده .
  • نمی توان سایر خدمات پیش زمینه را شروع کرد.
  • به مجوز نوع خاصی نیاز ندارد، اگرچه همچنان به مجوز FOREGROUND_SERVICE نیاز دارد.
  • یک shortService تنها در صورتی می‌تواند به نوع سرویس دیگری تغییر کند که برنامه در حال حاضر واجد شرایط شروع یک سرویس پیش‌زمینه جدید باشد.
  • یک سرویس پیش‌زمینه می‌تواند در هر زمانی نوع خود را به shortService تغییر دهد، در این مرحله دوره زمانی شروع می‌شود.

مهلت زمانی برای shortService از لحظه فراخوانی Service.startForeground() شروع می شود. انتظار می رود که برنامه قبل از اتمام زمان Service.stopSelf() یا Service.stopForeground() را فراخوانی کند. در غیر این صورت، Service.onTimeout() جدید فراخوانی می‌شود و به برنامه‌ها فرصت کوتاهی می‌دهد تا با stopSelf() یا stopForeground() سرویس خود را متوقف کنند.

مدت کوتاهی پس از فراخوانی Service.onTimeout() ، برنامه وارد یک حالت کش می شود و دیگر در پیش زمینه در نظر گرفته نمی شود، مگر اینکه کاربر به طور فعال با برنامه تعامل داشته باشد. مدت کوتاهی پس از کش شدن برنامه و متوقف نشدن سرویس، برنامه یک ANR دریافت می کند. پیام ANR به FOREGROUND_SERVICE_TYPE_SHORT_SERVICE اشاره می کند. به این دلایل، اجرای فراخوان Service.onTimeout() بهترین روش در نظر گرفته می شود.

فراخوانی Service.onTimeout() در اندروید 13 و پایین‌تر وجود ندارد. اگر همان سرویس در چنین دستگاه‌هایی اجرا شود، نه مهلت زمانی دریافت می‌کند و نه ANR. مطمئن شوید که سرویس شما به محض اتمام کار پردازش متوقف می شود، حتی اگر هنوز فراخوانی Service.onTimeout() دریافت نکرده باشد.

توجه به این نکته مهم است که اگر مهلت زمانی shortService رعایت نشود، برنامه ANR می‌کند حتی اگر سایر خدمات پیش‌زمینه معتبر یا سایر فرآیندهای چرخه عمر برنامه در حال اجرا باشد.

اگر برنامه‌ای برای کاربر قابل مشاهده است یا یکی از معافیت‌هایی را برآورده می‌کند که اجازه می‌دهد خدمات پیش‌زمینه از پس‌زمینه شروع شود، با فراخوانی مجدد Service.StartForeground() با پارامتر FOREGROUND_SERVICE_TYPE_SHORT_SERVICE ، مدت زمان 3 دقیقه دیگر تمدید می‌شود. اگر برنامه برای کاربر قابل مشاهده نباشد و یکی از معافیت ها را برآورده نکند، هرگونه تلاش برای راه اندازی یک سرویس پیش زمینه دیگر، صرف نظر از نوع، باعث ایجاد یک ForegroundServiceStartNotAllowedException می شود.

اگر کاربری بهینه سازی باتری را برای برنامه شما غیرفعال کند، باز هم تحت تأثیر مهلت زمانی کوتاه سرویس FGS است.

اگر یک سرویس پیش‌زمینه را راه‌اندازی کنید که شامل نوع shortService و نوع دیگری از سرویس پیش‌زمینه است، سیستم اعلان نوع shortService را نادیده می‌گیرد. با این حال، خدمات همچنان باید به پیش نیازهای سایر انواع اعلام شده پایبند باشد. برای اطلاعات بیشتر، به مستندات خدمات پیش زمینه مراجعه کنید.

کاربرد ویژه

نوع سرویس پیش زمینه برای اعلام در مانیفست در زیر
android:foregroundServiceType
specialUse
اجازه اعلام در مانیفست شما
FOREGROUND_SERVICE_SPECIAL_USE
ثابت برای عبور به startForeground()
FOREGROUND_SERVICE_TYPE_SPECIAL_USE
پیش نیازهای زمان اجرا
هیچ کدام
توضیحات

موارد استفاده معتبر از خدمات پیش زمینه را که تحت پوشش سایر انواع سرویس های پیش زمینه نیستند، پوشش می دهد.

علاوه بر اعلام نوع سرویس پیش زمینه FOREGROUND_SERVICE_TYPE_SPECIAL_USE ، توسعه دهندگان باید موارد استفاده را در مانیفست اعلام کنند. برای انجام این کار، آنها عنصر <property> را در عنصر <service> مشخص می کنند. وقتی برنامه خود را در کنسول Google Play ارسال می کنید، این مقادیر و موارد استفاده مربوطه بررسی می شوند. موارد استفاده ای که ارائه می کنید به صورت رایگان هستند و باید مطمئن شوید که اطلاعات کافی را ارائه می دهید تا به بازبین اجازه دهید ببیند چرا باید از نوع specialUse استفاده کنید.

<service android:name="fooService" android:foregroundServiceType="specialUse">
  <property android:name="android.app.PROPERTY_SPECIAL_USE_FGS_SUBTYPE"
      android:value="explanation_for_special_use"/>
</service>

سیستم معاف است

نوع سرویس پیش زمینه برای اعلام در مانیفست در زیر
android:foregroundServiceType
systemExempted
اجازه اعلام در مانیفست شما
FOREGROUND_SERVICE_SYSTEM_EXEMPTED
ثابت برای عبور به startForeground()
FOREGROUND_SERVICE_TYPE_SYSTEM_EXEMPTED
پیش نیازهای زمان اجرا
هیچ کدام
توضیحات

برای برنامه های کاربردی سیستم و ادغام های سیستمی خاص، برای ادامه استفاده از خدمات پیش زمینه محفوظ است.

برای استفاده از این نوع، یک برنامه باید حداقل یکی از معیارهای زیر را داشته باشد:

  • دستگاه در حالت نمایشی است
  • برنامه مالک دستگاه است
  • برنامه مالک پروفایل است
  • برنامه‌های امنیتی که نقش ROLE_EMERGENCY را دارند
  • برنامه های مدیریت دستگاه
  • برنامه‌های دارای مجوز SCHEDULE_EXACT_ALARM یا USE_EXACT_ALARM
  • برنامه های VPN (پیکربندی شده با استفاده از تنظیمات > شبکه و اینترنت > VPN )

    در غیر این صورت، اعلان این نوع باعث می شود که سیستم یک ForegroundServiceTypeNotAllowedException پرتاب کند.

اجرای خط‌مشی Google Play برای استفاده از انواع سرویس‌های پیش‌زمینه

اگر برنامه شما Android 14 یا بالاتر را هدف قرار می دهد، باید انواع خدمات پیش زمینه برنامه خود را در صفحه محتوای برنامه کنسول Play ( خط مشی > محتوای برنامه ) اعلام کنید. برای اطلاعات بیشتر در مورد نحوه اعلام انواع سرویس های پیش زمینه خود در Play Console، به درک خدمات پیش زمینه و الزامات هدف تمام صفحه مراجعه کنید.