با شروع 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
- پیش نیازهای زمان اجرا
حداقل یکی از شرایط زیر باید درست باشد:
حداقل یکی از مجوزهای زیر را در مانیفست خود اعلام کنید:
حداقل یکی از مجوزهای زمان اجرا زیر را درخواست کنید و به آنها اعطا شود:
با
UsbManager.requestPermission()
تماس بگیرید
- توضیحات
تعامل با دستگاه های خارجی که به بلوتوث، 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
- پیش نیازهای زمان اجرا
حداقل یکی از شرایط زیر باید درست باشد:
مجوز
HIGH_SAMPLING_RATE_SENSORS
را در مانیفست خود اعلام کنید.حداقل یکی از مجوزهای زمان اجرا زیر را درخواست کنید و به آنها اعطا شود:
- توضیحات
هر گونه موارد استفاده طولانی مدت برای پشتیبانی از برنامه های دسته تناسب اندام مانند ردیاب های ورزشی.
مکان
- نوع سرویس پیش زمینه برای اعلام در مانیفست در زیر
-
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، به درک خدمات پیش زمینه و الزامات هدف تمام صفحه مراجعه کنید.