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

برای کمک به توسعه‌دهندگان در تعریف سرویس‌های پیش‌زمینه کاربر، اندروید 10 ویژگی android:foregroundServiceType در عنصر <service> معرفی کرد.

اگر برنامه شما اندروید 14 را هدف قرار می دهد، باید انواع خدمات پیش زمینه مناسب را مشخص کند. مانند نسخه های قبلی اندروید، چندین نوع را می توان با هم ترکیب کرد. این لیست انواع خدمات پیش زمینه را برای انتخاب نشان می دهد:

اگر مورد استفاده در برنامه شما با هیچ یک از این انواع مرتبط نیست، اکیداً توصیه می‌کنیم که منطق خود را برای استفاده از WorkManager یا کارهای انتقال داده توسط کاربر تغییر دهید.

انواع health, remoteMessaging, shortService, specialUse و systemExempted در اندروید 14 جدید هستند.

قطعه کد زیر نمونه ای از اعلان نوع سرویس پیش زمینه را در مانیفست ارائه می دهد:

<manifest ...>
  <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
  <uses-permission android:name="android.permission.FOREGROUND_SERVICE_MEDIA_PLAYBACK" />
    <application ...>
      <service
          android:name=".MyMediaPlaybackService"
          android:foregroundServiceType="mediaPlayback"
          android:exported="false">
      </service>
    </application>
</manifest>

اگر برنامه‌ای که اندروید 14 را هدف قرار می‌دهد، انواعی را برای یک سرویس معین در مانیفست تعریف نمی‌کند، سیستم با فراخوانی startForeground() برای آن سرویس MissingForegroundServiceTypeException را افزایش می‌دهد.

مجوز جدید برای استفاده از انواع خدمات پیش زمینه را اعلام کنید

اگر برنامه هایی که اندروید 14 را هدف قرار می دهند از سرویس پیش زمینه استفاده می کنند، باید مجوز خاصی را بر اساس نوع سرویس پیش زمینه ای که اندروید 14 معرفی می کند، اعلام کنند. این مجوزها در بخش‌هایی با عنوان "مجوز که باید در فایل مانیفست خود اعلام کنید" در موارد استفاده مورد نظر و اجرای هر بخش نوع خدمات پیش‌زمینه در این صفحه ظاهر می‌شوند.

همه مجوزها به عنوان مجوزهای عادی تعریف شده اند و به طور پیش فرض اعطا می شوند. کاربران نمی توانند این مجوزها را لغو کنند.

نوع سرویس پیش زمینه را در زمان اجرا درج کنید

بهترین روش برای برنامه هایی که خدمات پیش زمینه را شروع می کنند، استفاده از نسخه ServiceCompat startForeground() (موجود در androidx-core 1.12 و بالاتر) است که در آن یک عدد صحیح بیتی از انواع سرویس های پیش زمینه ارسال می کنید. شما می توانید انتخاب کنید که یک یا چند مقدار نوع ارسال کنید.

معمولاً باید فقط انواع مورد نیاز برای یک مورد خاص را اعلام کنید. این امر برآوردن انتظارات سیستم را برای هر نوع خدمات پیش زمینه آسان تر می کند. در مواردی که یک سرویس پیش زمینه با چندین نوع شروع می شود، آنگاه سرویس پیش زمینه باید به الزامات اجرای پلت فرم در همه انواع پایبند باشد.

ServiceCompat.startForeground(0, notification, FOREGROUND_SERVICE_TYPE_LOCATION)

اگر نوع سرویس پیش زمینه در تماس مشخص نشده باشد، نوع به طور پیش فرض مقادیر تعریف شده در مانیفست را تعیین می کند. اگر نوع سرویس را در مانیفست مشخص نکرده‌اید، سیستم MissingForegroundServiceTypeException را پرتاب می‌کند.

اگر سرویس پیش‌زمینه پس از راه‌اندازی به مجوزهای جدید نیاز دارد، باید دوباره startForeground() فراخوانی کنید و انواع سرویس‌های جدید را اضافه کنید. به عنوان مثال، فرض کنید یک برنامه تناسب اندام یک سرویس ردیاب در حال اجرا را اجرا می کند که همیشه به اطلاعات location نیاز دارد، اما ممکن است به مجوزهای media نیاز داشته باشد یا نباشد. باید هم location و هم mediaPlayback را در مانیفست اعلام کنید. اگر کاربر اجرا را شروع کند و فقط می‌خواهد موقعیت مکانی او ردیابی شود، برنامه شما باید startForeground() را فراخوانی کند و فقط نوع سرویس location را ارسال کند. سپس، اگر کاربر می‌خواهد پخش صدا را شروع کند، دوباره startForeground() را فراخوانی کنید و location|mediaPlayback را ارسال کنید.

بررسی زمان اجرای سیستم

سیستم استفاده مناسب از انواع سرویس های پیش زمینه را بررسی می کند و تأیید می کند که برنامه مجوزهای زمان اجرا مناسب را درخواست کرده است یا از API های مورد نیاز استفاده می کند. برای مثال، سیستم انتظار دارد برنامه‌هایی که از نوع سرویس پیش‌زمینه FOREGROUND_SERVICE_TYPE_LOCATION استفاده می‌کنند، ACCESS_COARSE_LOCATION یا ACCESS_FINE_LOCATION درخواست کنند.

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

مشخصات اجرای پلت فرم در بخش هایی با عنوان "نیازهای زمان اجرا" در موارد استفاده مورد نظر و اجرای هر بخش نوع خدمات پیش زمینه در این صفحه ظاهر می شود.

موارد استفاده در نظر گرفته شده و اجرا برای هر نوع خدمات پیش زمینه

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

دوربین

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

مجوز زمان اجرا CAMERA را درخواست کنید و به آنها اعطا شود

توجه: مجوز زمان اجرا 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
dataSync
اجازه اعلام در مانیفست شما
FOREGROUND_SERVICE_DATA_SYNC
ثابت برای عبور به startForeground()
FOREGROUND_SERVICE_TYPE_DATA_SYNC
پیش نیازهای زمان اجرا
هیچ کدام
توضیحات

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

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

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

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

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

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

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

سلامتی

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

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

توجه: مجوز زمان اجرا BODY_SENSORS مشمول محدودیت‌های حین استفاده است. به همین دلیل، نمی‌توانید سرویس پیش‌زمینه health ایجاد کنید که از حسگرهای بدن در زمانی که برنامه شما در پس‌زمینه است استفاده می‌کند، به استثنای چند مورد . برای اطلاعات بیشتر، به محدودیت‌های راه‌اندازی سرویس‌های پیش‌زمینه که به مجوزهای حین استفاده نیاز دارند مراجعه کنید.

توضیحات

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

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

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

توجه: مجوز زمان اجرا BODY_SENSORS مشمول محدودیت‌های حین استفاده است. به همین دلیل، نمی‌توانید سرویس پیش‌زمینه health ایجاد کنید که از حسگرهای بدن در زمانی که برنامه شما در پس‌زمینه است استفاده می‌کند، به استثنای چند مورد . برای اطلاعات بیشتر، به محدودیت‌های راه‌اندازی سرویس‌های پیش‌زمینه که به مجوزهای حین استفاده نیاز دارند مراجعه کنید.

توضیحات

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

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

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

توجه: مجوز زمان اجرا BODY_SENSORS مشمول محدودیت‌های حین استفاده است. به همین دلیل، نمی‌توانید سرویس پیش‌زمینه health ایجاد کنید که از حسگرهای بدن در زمانی که برنامه شما در پس‌زمینه است استفاده می‌کند، به استثنای چند مورد . برای اطلاعات بیشتر، به محدودیت‌های راه‌اندازی سرویس‌های پیش‌زمینه که به مجوزهای حین استفاده نیاز دارند مراجعه کنید.

توضیحات

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

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

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

توجه: مجوز زمان اجرا BODY_SENSORS مشمول محدودیت‌های حین استفاده است. به همین دلیل، نمی‌توانید سرویس پیش‌زمینه health ایجاد کنید که از حسگرهای بدن در زمانی که برنامه شما در پس‌زمینه است استفاده می‌کند، به استثنای چند مورد . برای اطلاعات بیشتر، به محدودیت‌های راه‌اندازی سرویس‌های پیش‌زمینه که به مجوزهای حین استفاده نیاز دارند مراجعه کنید.

توضیحات

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

مکان

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

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

توجه: برای بررسی اینکه کاربر خدمات موقعیت مکانی را فعال کرده و همچنین به مجوزهای زمان اجرا اجازه دسترسی داده است، از PermissionChecker#checkSelfPermission() استفاده کنید.

توجه: مجوزهای زمان اجرا مکان مشمول محدودیت‌های حین استفاده هستند. به همین دلیل، زمانی که برنامه شما در پس‌زمینه است، نمی‌توانید یک سرویس پیش‌زمینه location ایجاد کنید، مگر اینکه مجوز زمان اجرا ACCESS_BACKGROUND_LOCATION را دریافت کرده باشید. برای اطلاعات بیشتر، به محدودیت‌های راه‌اندازی سرویس‌های پیش‌زمینه که به مجوزهای حین استفاده نیاز دارند مراجعه کنید.

توضیحات

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

جایگزین ها

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

رسانه ها

نوع سرویس پیش زمینه برای اعلام در مانیفست در زیر
android:foregroundServiceType
mediaPlayback
اجازه اعلام در مانیفست شما
FOREGROUND_SERVICE_MEDIA_PLAYBACK
ثابت برای عبور به startForeground()
FOREGROUND_SERVICE_TYPE_MEDIA_PLAYBACK
پیش نیازهای زمان اجرا
هیچ کدام
توضیحات
پخش صدا یا ویدیو را از پس‌زمینه ادامه دهید. پشتیبانی از قابلیت ضبط ویدیوی دیجیتال (DVR) در Android TV .
جایگزین ها
اگر در حال نمایش ویدیوی تصویر در تصویر هستید، از حالت تصویر در تصویر استفاده کنید.

فرافکنی رسانه ای

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

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

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

توضیحات

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

جایگزین ها

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

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

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

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

توضیحات

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

جایگزین ها

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

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

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

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

توضیحات

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

جایگزین ها

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

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

توجه: مجوز زمان اجرا RECORD_AUDIO مشمول محدودیت‌های حین استفاده است. به همین دلیل، به استثنای چند مورد ، نمی‌توانید در حالی که برنامه شما در پس‌زمینه است، یک سرویس پیش‌زمینه microphone ایجاد کنید. برای اطلاعات بیشتر، به محدودیت‌های راه‌اندازی سرویس‌های پیش‌زمینه که به مجوزهای حین استفاده نیاز دارند مراجعه کنید.

توضیحات

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

تماس تلفنی

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