Начиная с 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 - Предварительные требования для выполнения
Хотя бы одно из следующих условий должно быть истинным:
Объявите хотя бы одно из следующих разрешений в своем манифесте:
Запросите и получите хотя бы одно из следующих разрешений среды выполнения:
- Описание
Взаимодействие с внешними устройствами, для которых требуется подключение Bluetooth, NFC, ИК-порт, USB или сетевое соединение.
- Альтернативы
Если вашему приложению требуется непрерывная передача данных на внешнее устройство, рассмотрите возможность использования сопутствующего диспетчера устройств . Используйте API присутствия сопутствующего устройства , чтобы ваше приложение продолжало работать, пока сопутствующее устройство находится в зоне действия.
Если вашему приложению необходимо выполнить поиск устройств Bluetooth, рассмотрите возможность использования вместо этого API сканирования Bluetooth .
Синхронизировать данные
- Тип активной службы, который нужно объявить в манифесте в разделе
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в своем манифесте.Запросите и получите как минимум одно из следующих разрешений на выполнение:
- Описание
Любые долгосрочные сценарии использования для поддержки приложений в категории фитнеса, например, трекеров тренировок.
Местоположение
- 要在清单中的以下位置声明的前台服务类型
android:foregroundServiceTypelocation- 在清单中声明的权限
FOREGROUND_SERVICE_LOCATION- 要传递给
startForeground()的常量 FOREGROUND_SERVICE_TYPE_LOCATION- 运行时前提条件
用户必须已启用位置信息服务,并且应用必须至少获得以下一项运行时权限:
- 说明
需要位置信息使用权的长时间运行的用例,例如导航和位置信息分享。
- 替代方案
如果您的应用需要在用户到达特定位置时触发,请考虑改用 Geofence API。
Мультимедиа
- 在清单中声明的前台服务类型
android:foregroundServiceTypemediaPlayback- 要在清单中声明的权限
FOREGROUND_SERVICE_MEDIA_PLAYBACK- 要传递给
startForeground()的常量 FOREGROUND_SERVICE_TYPE_MEDIA_PLAYBACK- 运行时前提条件
- 无
- 说明
在后台继续播放音频或视频。在 Android TV 上支持数字视频录制 (DVR) 功能。
- 替代方案
如果您要显示画中画视频,请使用画中画模式。
Обработка файла…
- Тип службы переднего плана, который нужно объявить в манифесте в разделе
-
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> не остановилась в течение времени ожидания: <comComponent_name> ».Примечание .
Service.onTimeout(int, int)недоступен на Android 14 или более ранней версии. На устройствах с этими версиями, если служба обработки мультимедиа достигает периода ожидания, система немедленно кэширует приложение. По этой причине вашему приложению не следует ждать получения уведомления о тайм-ауте. Вместо этого ему следует прекратить работу службы переднего плана или заменить ее на фоновую службу, как только это станет возможным.
Проецирование медиафайлов
- 在清单中声明的前台服务类型
android:foregroundServiceTypemediaProjection- 要在清单中声明的权限
FOREGROUND_SERVICE_MEDIA_PROJECTION- 要传递给
startForeground()的常量 FOREGROUND_SERVICE_TYPE_MEDIA_PROJECTION- 运行时前提条件
在启动前台服务之前,调用
createScreenCaptureIntent()方法。这样做会向用户显示权限通知;用户必须先授予权限,然后您才能创建服务。创建前台服务后,您可以调用
MediaProjectionManager.getMediaProjection()。- 说明
使用
MediaProjectionAPI 将内容投影到非主要显示屏或外部设备。这些内容不必全都为媒体内容。- 替代方案
如需将媒体内容流式传输到其他设备,请使用 Google Cast SDK。
Микрофон
- 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.
- Приложение является приложением для звонков по умолчанию благодаря роли
- Описание
Продолжить текущий вызов с помощью API
ConnectionService.- Альтернативы
Если вам нужно совершать телефонные, видео- или VoIP-звонки, используйте библиотеку
android.telecom.Попробуйте использовать
CallScreeningServiceдля фильтрации звонков.
Дистанционный обмен сообщениями
- 要在清单中的以下位置声明的前台服务类型
android:foregroundServiceTyperemoteMessaging- 在清单中声明的权限
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()не существует в Android 13 и более ранних версиях. Если та же служба работает на таких устройствах, она не получает тайм-аут и не получает ANR. Убедитесь, что ваша служба останавливается, как только завершает задачу обработки, даже если она еще не получила обратный вызовService.onTimeout().Важно отметить, что если время ожидания
shortServiceне соблюдается, приложение выдаст ошибку ANR, даже если у него есть другие допустимые службы переднего плана или другие запущенные процессы жизненного цикла приложения.Если приложение видно пользователю или удовлетворяет одному из исключений , позволяющих запускать службы переднего плана из фонового режима, повторный вызов
Service.StartForeground()с параметромFOREGROUND_SERVICE_TYPE_SHORT_SERVICEпродлевает время ожидания еще на 3 минуты. Если приложение не видно пользователю и не удовлетворяет ни одному из исключений , любая попытка запустить другую службу переднего плана, независимо от типа, вызываетForegroundServiceStartNotAllowedException.Если пользователь отключает оптимизацию заряда батареи для вашего приложения, на это все равно влияет тайм-аут shortService FGS.
Если вы запускаете службу переднего плана, включающую тип
shortServiceи другой тип службы переднего плана, система игнорирует объявление типаshortService. Однако служба по-прежнему должна соответствовать требованиям других объявленных типов. Дополнительные сведения см. в документации по службам Foreground .
Специальное использование
- 要在清单中声明的前台服务类型
android:foregroundServiceTypespecialUse- 在清单中声明的权限
FOREGROUND_SERVICE_SPECIAL_USE- 要传递给
startForeground()的常量 FOREGROUND_SERVICE_TYPE_SPECIAL_USE- 运行时前提条件
- 无
- 说明
涵盖其他前台服务类型未涵盖的所有有效前台服务用例。
除了声明
FOREGROUND_SERVICE_TYPE_SPECIAL_USE前台服务类型之外,开发者还应在清单中声明用例。为此,他们会在<service>元素内指定<property>元素。这些值和相应的应用场景 。用途 您提供的案例均为自由形式,因此,您应确保提供足够的 相关信息,让审核人员了解您为何需要使用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>
Исключение, добавленное системой
- Foreground service type to declare in manifest under
android:foregroundServiceTypesystemExempted- Permission to declare in your manifest
FOREGROUND_SERVICE_SYSTEM_EXEMPTED- Constant to pass to
startForeground() FOREGROUND_SERVICE_TYPE_SYSTEM_EXEMPTED- Runtime prerequisites
- None
- Description
Reserved for system applications and specific system integrations, to continue to use foreground services.
To use this type, an app must meet at least one of the following criteria:
- Device is in demo mode state
- App is a Device Owner
- App is a Profiler Owner
- Safety Apps that have the
ROLE_EMERGENCYrole - Device Admin apps
- Apps holding
SCHEDULE_EXACT_ALARMorUSE_EXACT_ALARMpermission VPN apps (configured using Settings > Network & Internet > VPN)
Otherwise, declaring this type causes the system to throw a
ForegroundServiceTypeNotAllowedException.
Применение правил Google Play в отношении типов активных служб
如果您的应用以 Android 14 或更高版本为目标平台,您需要在 Play 管理中心的“应用内容”页面(政策 > 应用内容)中声明应用的前台服务类型。如需详细了解如何在 Play 管理中心内声明前台服务类型,请参阅了解前台服务和全屏 intent 要求。