از 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 استفاده کنید.
میکروفون
- Foreground service type to declare in manifest under
android:foregroundServiceTypemicrophone- 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_AUDIOruntime permission.- Description
Continue microphone capture from the background, such as voice recorders or communication apps.
تماس تلفنی
- 在清单中声明的前台服务类型
android:foregroundServiceTypephoneCall- 要在清单中声明的权限
FOREGROUND_SERVICE_PHONE_CALL- 要传递给
startForeground()的常量 FOREGROUND_SERVICE_TYPE_PHONE_CALL- 运行时前提条件
必须至少满足以下其中一个条件:
- 应用已在其清单文件中声明
MANAGE_OWN_CALLS权限。
- 应用已在其清单文件中声明
- 应用通过
ROLE_DIALER角色成为默认拨号器应用。
- 应用通过
- 说明
使用
ConnectionServiceAPI 继续当前通话。- 替代方案
如果您需要拨打电话、进行视频通话或 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:foregroundServiceTypeshortService- 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_SERVICEpermission. - A
shortServicecan 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
shortServiceat 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 callService.stopSelf()orService.stopForeground()before the timeout occurs. Otherwise, the newService.onTimeout()is called, giving apps a brief opportunity to callstopSelf()orstopForeground()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 mentionsFOREGROUND_SERVICE_TYPE_SHORT_SERVICE. For these reasons, it's considered best practice to implement theService.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 theService.onTimeout()callback yet.It's important to note that if the timeout of the
shortServiceis 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 theFOREGROUND_SERVICE_TYPE_SHORT_SERVICEparameter 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 aForegroundServiceStartNotAllowedException.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
shortServicetype and another foreground service type, the system ignores theshortServicetype 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، به درک خدمات پیش زمینه و الزامات هدف تمام صفحه مراجعه کنید.