برای کمک به توسعهدهندگان در تعریف سرویسهای پیشزمینه کاربر، اندروید 10 ویژگی android:foregroundServiceType
در عنصر <service>
معرفی کرد.
اگر برنامه شما اندروید 14 را هدف قرار می دهد، باید انواع خدمات پیش زمینه مناسب را مشخص کند. مانند نسخه های قبلی اندروید، چندین نوع را می توان با هم ترکیب کرد. این لیست انواع خدمات پیش زمینه را برای انتخاب نشان می دهد:
-
camera
-
connectedDevice
-
dataSync
-
health
-
location
-
mediaPlayback
-
mediaProjection
-
microphone
-
phoneCall
-
remoteMessaging
-
shortService
-
specialUse
-
systemExempted
اگر مورد استفاده در برنامه شما با هیچ یک از این انواع مرتبط نیست، اکیداً توصیه میکنیم که منطق خود را برای استفاده از 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
- پیش نیازهای زمان اجرا
حداقل یکی از شرایط زیر باید درست باشد:
حداقل یکی از مجوزهای زیر را در مانیفست خود اعلام کنید:
حداقل یکی از مجوزهای زمان اجرا زیر را درخواست کنید و به آنها اعطا شود:
با
UsbManager.requestPermission()
تماس بگیرید
- توضیحات
تعامل با دستگاه های خارجی که به بلوتوث، 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
- پیش نیازهای زمان اجرا
حداقل یکی از شرایط زیر باید درست باشد:
مجوز
HIGH_SAMPLING_RATE_SENSORS
را در مانیفست خود اعلام کنید.حداقل یکی از مجوزهای زمان اجرا زیر را درخواست کنید و به آنها اعطا شود:
توجه: مجوز زمان اجرا
BODY_SENSORS
مشمول محدودیتهای حین استفاده است. به همین دلیل، نمیتوانید سرویس پیشزمینهhealth
ایجاد کنید که از حسگرهای بدن در زمانی که برنامه شما در پسزمینه است استفاده میکند، به استثنای چند مورد . برای اطلاعات بیشتر، به محدودیتهای راهاندازی سرویسهای پیشزمینه که به مجوزهای حین استفاده نیاز دارند مراجعه کنید.- توضیحات
هر گونه موارد استفاده طولانی مدت برای پشتیبانی از برنامه های دسته تناسب اندام مانند ردیاب های ورزشی.
- نوع سرویس پیش زمینه برای اعلام در مانیفست در زیر
-
android:foregroundServiceType
-
health
- اجازه اعلام در مانیفست شما
-
FOREGROUND_SERVICE_HEALTH
- ثابت برای عبور به
startForeground()
-
FOREGROUND_SERVICE_TYPE_HEALTH
- پیش نیازهای زمان اجرا
حداقل یکی از شرایط زیر باید درست باشد:
مجوز
HIGH_SAMPLING_RATE_SENSORS
را در مانیفست خود اعلام کنید.حداقل یکی از مجوزهای زمان اجرا زیر را درخواست کنید و به آنها اعطا شود:
توجه: مجوز زمان اجرا
BODY_SENSORS
مشمول محدودیتهای حین استفاده است. به همین دلیل، نمیتوانید سرویس پیشزمینهhealth
ایجاد کنید که از حسگرهای بدن در زمانی که برنامه شما در پسزمینه است استفاده میکند، به استثنای چند مورد . برای اطلاعات بیشتر، به محدودیتهای راهاندازی سرویسهای پیشزمینه که به مجوزهای حین استفاده نیاز دارند مراجعه کنید.- توضیحات
هر گونه موارد استفاده طولانی مدت برای پشتیبانی از برنامه های دسته تناسب اندام مانند ردیاب های ورزشی.
- نوع سرویس پیش زمینه برای اعلام در مانیفست در زیر
-
android:foregroundServiceType
-
health
- اجازه اعلام در مانیفست شما
-
FOREGROUND_SERVICE_HEALTH
- ثابت برای عبور به
startForeground()
-
FOREGROUND_SERVICE_TYPE_HEALTH
- پیش نیازهای زمان اجرا
حداقل یکی از شرایط زیر باید درست باشد:
مجوز
HIGH_SAMPLING_RATE_SENSORS
را در مانیفست خود اعلام کنید.حداقل یکی از مجوزهای زمان اجرا زیر را درخواست کنید و به آنها اعطا شود:
توجه: مجوز زمان اجرا
BODY_SENSORS
مشمول محدودیتهای حین استفاده است. به همین دلیل، نمیتوانید سرویس پیشزمینهhealth
ایجاد کنید که از حسگرهای بدن در زمانی که برنامه شما در پسزمینه است استفاده میکند، به استثنای چند مورد . برای اطلاعات بیشتر، به محدودیتهای راهاندازی سرویسهای پیشزمینه که به مجوزهای حین استفاده نیاز دارند مراجعه کنید.- توضیحات
هر گونه موارد استفاده طولانی مدت برای پشتیبانی از برنامه های دسته تناسب اندام مانند ردیاب های ورزشی.
- نوع سرویس پیش زمینه برای اعلام در مانیفست در زیر
-
android:foregroundServiceType
-
health
- اجازه اعلام در مانیفست شما
-
FOREGROUND_SERVICE_HEALTH
- ثابت برای عبور به
startForeground()
-
FOREGROUND_SERVICE_TYPE_HEALTH
- پیش نیازهای زمان اجرا
حداقل یکی از شرایط زیر باید درست باشد:
مجوز
HIGH_SAMPLING_RATE_SENSORS
را در مانیفست خود اعلام کنید.حداقل یکی از مجوزهای زمان اجرا زیر را درخواست کنید و به آنها اعطا شود:
توجه: مجوز زمان اجرا
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، به درک خدمات پیش زمینه و الزامات هدف تمام صفحه مراجعه کنید.