از 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 - پیش نیازهای زمان اجرا
حداقل یکی از شرایط زیر باید درست باشد:
حداقل یکی از مجوزهای زیر را در مانیفست خود اعلام کنید:
حداقل یکی از مجوزهای زمان اجرا زیر را درخواست کنید و به آنها اعطا شود:
با
UsbManager.requestPermission()تماس بگیرید
- توضیحات
تعامل با دستگاه های خارجی که به بلوتوث، NFC، IR، USB یا اتصال شبکه نیاز دارند.
- جایگزین ها
اگر برنامه شما نیاز به انتقال مداوم داده به یک دستگاه خارجی دارد، به جای آن از مدیر دستگاه همراه استفاده کنید. از API حضور دستگاه همراه استفاده کنید تا به برنامه شما کمک کند تا زمانی که دستگاه همراه در محدوده است در حال اجرا بماند.
اگر برنامه شما نیاز به اسکن دستگاههای بلوتوث دارد، به جای آن از API اسکن بلوتوث استفاده کنید.
همگامسازی دادهها
- نوع سرویس پیشزمینهای برای اعلام در مانیفست تحت
android:foregroundServiceTypedataSync- اجازه برای اعلام در مانیفست
FOREGROUND_SERVICE_DATA_SYNC- ثابت برای ارسال به
startForeground() FOREGROUND_SERVICE_TYPE_DATA_SYNC- پیشنیازهای زمان اجرا
- هیچکدام
- شرح
عملیات انتقال داده، مانند موارد زیر:
- بارگذاری یا بارگیری دادهها
- عملیات پشتیبانگیری و بازیابی
- عملیات وارد کردن یا صادر کردن
- واکشی داده
- پردازش فایل محلی
- انتقال داده بین دستگاه و فضای ابری ازطریق شبکه
- موارد جایگزین
برای اطلاعات دقیق، جایگزینهای سرویسهای پیشزمینه همگامسازی داده را ببینید.
سلامت
- نوع سرویس پیش زمینه برای اعلام در مانیفست در زیر
-
android:foregroundServiceType -
health - اجازه اعلام در مانیفست شما
-
FOREGROUND_SERVICE_HEALTH - ثابت برای عبور به
startForeground() -
FOREGROUND_SERVICE_TYPE_HEALTH - پیش نیازهای زمان اجرا
حداقل یکی از شرایط زیر باید درست باشد:
مجوز
HIGH_SAMPLING_RATE_SENSORSدر مانیفست خود اعلام کنید.حداقل یکی از مجوزهای زمان اجرا زیر را درخواست کنید و به آنها اعطا شود:
-
BODY_SENSORSدر API 35 و پایینتر -
READ_HEART_RATE -
READ_SKIN_TEMPERATURE -
READ_OXYGEN_SATURATION -
ACTIVITY_RECOGNITION
-
- توضیحات
هر گونه موارد استفاده طولانی مدت برای پشتیبانی از برنامه های دسته تناسب اندام مانند ردیاب های ورزشی.
مکان
- نوع سرویس پیش زمینه برای اعلام در مانیفست در زیر
-
android:foregroundServiceType -
location - اجازه اعلام در مانیفست شما
-
FOREGROUND_SERVICE_LOCATION - ثابت برای عبور به
startForeground() -
FOREGROUND_SERVICE_TYPE_LOCATION - پیش نیازهای زمان اجرا
کاربر باید خدمات موقعیت مکانی را فعال کرده باشد و به برنامه باید حداقل یکی از مجوزهای زمان اجرا زیر اعطا شود:
- توضیحات
موارد استفاده طولانی مدت که نیاز به دسترسی به موقعیت مکانی دارند، مانند ناوبری و اشتراک گذاری مکان.
- جایگزین ها
اگر برنامه شما باید زمانی که کاربر به مکان های خاصی می رسد فعال شود، به جای آن از geofence API استفاده کنید.
رسانه
- نوع سرویس پیشزمینهای برای اعلام در مانیفست تحت
android:foregroundServiceTypemediaPlayback- اجازه برای اعلام در مانیفست
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:foregroundServiceTypemediaProjection- اجازه برای اعلام در مانیفست
FOREGROUND_SERVICE_MEDIA_PROJECTION- ثابت برای ارسال به
startForeground() FOREGROUND_SERVICE_TYPE_MEDIA_PROJECTION- پیشنیازهای زمان اجرا
پیشاز شروع سرویس پیشزمینهای، روش
createScreenCaptureIntent()را فراخوانی کنید. با انجام این کار، اعلان اجازه به کاربر نشان داده میشود؛ کاربر باید اجازه را اعطا کند تا بتوانید سرویس را ایجاد کنید.پساز ایجاد سرویس پیشزمینهای، میتوانید
MediaProjectionManager.getMediaProjection()را فراخوانی کنید.- شرح
محتوا را بااستفاده از میاناهای برنامهسازی کاربردی
MediaProjectionبه نمایشگر غیر اصلی یا دستگاه خارجی فرافکنی کنید. این محتوا لزوماً نباید محتوای رسانهای انحصاری باشد.- موارد جایگزین
برای جاریسازی رسانه در دستگاهی دیگر، از کیت توسعه نرمافزار Google Cast استفاده کنید.
میکروفون
- نوع سرویس پیشزمینهای برای اعلام در مانیفست تحت
android:foregroundServiceTypemicrophone- اجازه برای اعلام در مانیفست
FOREGROUND_SERVICE_MICROPHONE- ثابت برای ارسال به
startForeground() FOREGROUND_SERVICE_TYPE_MICROPHONE- پیشنیازهای زمان اجرا
اجازه زمان اجرای
RECORD_AUDIOرا درخواست و دریافت کنید.- شرح
ادامه ضبط میکروفون از پسزمینه، مثل ضبطکنندههای صدا یا برنامههای ارتباطی.
تماس تلفنی
- نوع سرویس پیشزمینهای برای اعلام در مانیفست تحت
android:foregroundServiceTypephoneCall- اجازه برای اعلام در مانیفست
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، به درک خدمات پیش زمینه و الزامات هدف تمام صفحه مراجعه کنید.