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

با شروع Android 14 (سطح API 34)، باید یک نوع سرویس مناسب برای هر سرویس پیش زمینه را اعلام کنید. این بدان معناست که باید نوع سرویس را در مانیفست برنامه خود اعلام کنید و همچنین مجوز سرویس پیش زمینه مناسب را برای آن نوع درخواست کنید (علاوه بر درخواست مجوز 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() را فراخوانی کنید.

توضیحات

محتوای پروژه را با استفاده از 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 است.
توضیحات

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