انواع سرویس پیش‌زمینه‌ای

از Android نسخه ۱۴ (سطح 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 TV.

موارد جایگزین

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

در حال پردازش رسانه

نوع سرویس پیش زمینه برای اعلام در مانیفست در زیر
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() را فراخوانی کنید.

شرح

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

موارد جایگزین

برای جاری‌سازی رسانه در دستگاهی دیگر، از کیت توسعه نرم‌افزار Google Cast استفاده کنید.

میکروفون

Foreground service type to declare in manifest under
android:foregroundServiceType
microphone
Permission to declare in your manifest
FOREGROUND_SERVICE_MICROPHONE
Constant to pass to startForeground()
FOREGROUND_SERVICE_TYPE_MICROPHONE
Runtime prerequisites

Request and be granted the RECORD_AUDIO runtime permission.

Description

Continue microphone capture from the background, such as voice recorders or communication apps.

تماس تلفنی

在清单中声明的前台服务类型
android:foregroundServiceType
phoneCall
要在清单中声明的权限
FOREGROUND_SERVICE_PHONE_CALL
要传递给 startForeground() 的常量
FOREGROUND_SERVICE_TYPE_PHONE_CALL
运行时前提条件

必须至少满足以下其中一个条件:

  • 应用通过 ROLE_DIALER 角色成为默认拨号器应用。
说明

使用 ConnectionService API 继续当前通话。

替代方案

如果您需要拨打电话、进行视频通话或 VoIP 通话,请考虑使用 android.telecom 库。

考虑使用 CallScreeningService 过滤来电。

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

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

سرویس کوتاه

Foreground service type to declare in manifest under
android:foregroundServiceType
shortService
Permission to declare in your manifest
None
Constant to pass to startForeground()
FOREGROUND_SERVICE_TYPE_SHORT_SERVICE
Runtime prerequisites
None
Description

Quickly finish critical work that cannot be interrupted or postponed.

This type has some unique characteristics:

  • Can only run for a short period of time (about 3 minutes).
  • No support for sticky foreground services.
  • Cannot start other foreground services.
  • Doesn't require a type-specific permission, though it still requires the FOREGROUND_SERVICE permission.
  • A shortService can only change to another service type if the app is currently eligible to start a new foreground service.
  • A foreground service can change its type to shortService at any time, at which point the timeout period begins.

The timeout for shortService begins from the moment that Service.startForeground() is called. The app is expected to call Service.stopSelf() or Service.stopForeground() before the timeout occurs. Otherwise, the new Service.onTimeout() is called, giving apps a brief opportunity to call stopSelf() or stopForeground() to stop their service.

A short time after Service.onTimeout() is called, the app enters a cached state and is no longer considered to be in the foreground, unless the user is actively interacting with the app. A short time after the app is cached and the service has not stopped, the app receives an ANR. The ANR message mentions FOREGROUND_SERVICE_TYPE_SHORT_SERVICE. For these reasons, it's considered best practice to implement the Service.onTimeout() callback.

The Service.onTimeout() callback doesn't exist on Android 13 and lower. If the same service runs on such devices, it doesn't receive a timeout, nor does it ANR. Make sure that your service stops as soon as it finishes the processing task, even if it hasn't received the Service.onTimeout() callback yet.

It's important to note that if the timeout of the shortService is not respected, the app will ANR even if it has other valid foreground services or other app lifecycle processes running.

If an app is visible to the user or satisfies one of the exemptions that allow foreground services to be started from the background, calling Service.StartForeground() again with the FOREGROUND_SERVICE_TYPE_SHORT_SERVICE parameter extends the timeout by another 3 minutes. If the app isn't visible to the user and doesn't satisfy one of the exemptions, any attempt to start another foreground service, regardless of type, causes a ForegroundServiceStartNotAllowedException.

If a user disables battery optimization for your app, it's still affected by the timeout of shortService FGS.

If you start a foreground service that includes the shortService type and another foreground service type, the system ignores the shortService type declaration. However, the service must still adhere to the prerequisites of the other declared types. For more information, see the Foreground services documentation.

استفاده ویژه

نوع سرویس پیش زمینه برای اعلام در مانیفست در زیر
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، به درک خدمات پیش زمینه و الزامات هدف تمام صفحه مراجعه کنید.