从 Android 14(API 级别 34)开始,您必须为每个前台服务声明适当的服务类型。这意味着,您必须在应用清单中声明服务类型,并且除了请求 FOREGROUND_SERVICE
权限之外,还必须为该类型请求适当的前台服务权限。此外,根据前台服务类型,您可能需要在启动服务之前请求运行时权限。
摄像头
- Тип службы переднего плана, который нужно объявить в манифесте в разделе
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
- Предварительные требования для выполнения
Хотя бы одно из следующих условий должно быть истинным:
Объявите хотя бы одно из следующих разрешений в своем манифесте:
Запросите и получите хотя бы одно из следующих разрешений среды выполнения:
- Описание
Взаимодействие с внешними устройствами, для которых требуется подключение Bluetooth, NFC, ИК-порт, USB или сетевое соединение.
- Альтернативы
Если вашему приложению требуется непрерывная передача данных на внешнее устройство, рассмотрите возможность использования сопутствующего диспетчера устройств . Используйте API присутствия сопутствующего устройства , чтобы ваше приложение продолжало работать, пока сопутствующее устройство находится в зоне действия.
Если вашему приложению необходимо выполнить поиск устройств Bluetooth, рассмотрите возможность использования вместо этого API сканирования Bluetooth .
数据同步
- Тип службы переднего плана, который нужно объявить в манифесте в разделе
-
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
-
location
- Разрешение объявить в своем манифесте
-
FOREGROUND_SERVICE_LOCATION
- Константа для передачи в
startForeground()
-
FOREGROUND_SERVICE_TYPE_LOCATION
- Предварительные требования для выполнения
У пользователя должны быть включены службы определения местоположения, а приложению должно быть предоставлено хотя бы одно из следующих разрешений во время выполнения:
Примечание. Чтобы проверить, включил ли пользователь службы определения местоположения, а также предоставил ли ему доступ к разрешениям среды выполнения, используйте
PermissionChecker#checkSelfPermission()
Примечание. На разрешения выполнения местоположения распространяются ограничения во время использования. По этой причине вы не можете создать приоритетную службу определения
location
, пока ваше приложение находится в фоновом режиме, если вам не предоставлено разрешение среды выполненияACCESS_BACKGROUND_LOCATION
. Дополнительные сведения см. в разделе Ограничения на запуск служб переднего плана, которым требуются разрешения во время использования .- Описание
Долгосрочные варианты использования, требующие доступа к местоположению, например навигация и совместное использование местоположения.
- Альтернативы
Если ваше приложение должно запускаться, когда пользователь достигает определенных мест, рассмотрите возможность использования вместо этого 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
-
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
.
- Приложение является приложением дозвона по умолчанию с ролью
- Описание
Продолжите текущий вызов, используя API
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()
не существует в Android 13 и более ранних версиях. Если та же служба работает на таких устройствах, она не получает тайм-аут и не получает ANR. Убедитесь, что ваша служба останавливается, как только завершает задачу обработки, даже если она еще не получила обратный вызовService.onTimeout()
.Важно отметить, что если время ожидания
shortService
не соблюдается, приложение выдаст ошибку ANR, даже если у него есть другие допустимые службы переднего плана или другие запущенные процессы жизненного цикла приложения.Если приложение видно пользователю или удовлетворяет одному из исключений , позволяющих запускать службы переднего плана из фонового режима, повторный вызов
Service.StartForeground()
с параметромFOREGROUND_SERVICE_TYPE_SHORT_SERVICE
продлевает время ожидания еще на 3 минуты. Если приложение не видно пользователю и не удовлетворяет ни одному из исключений , любая попытка запустить другую службу переднего плана, независимо от типа, вызываетForegroundServiceStartNotAllowedException
.Если пользователь отключает оптимизацию заряда батареи для вашего приложения, на это все равно влияет тайм-аут shortService FGS.
Если вы запускаете службу переднего плана, включающую тип
shortService
и другой тип службы переднего плана, система игнорирует объявление типаshortService
. Однако служба по-прежнему должна соответствовать требованиям других объявленных типов. Дополнительные сведения см. в документации по службам Foreground .
特殊用途
- Тип службы переднего плана, который нужно объявить в манифесте в разделе
-
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
, используют службу Foreground Service для продолжения подачи сигналов тревоги в фоновом режиме, включая сигналы тревоги только для тактильных сигналов. Приложения VPN (настраиваются с помощью «Настройки» > «Сеть и Интернет» > «VPN» ).
В противном случае объявление этого типа приведет к тому, что система выдаст исключение
ForegroundServiceTypeNotAllowedException
.
使用前台服务类型时强制执行的 Google Play 政策
Если ваше приложение предназначено для Android 14 или более поздней версии, вам необходимо объявить типы служб переднего плана вашего приложения на странице контента приложения Play Console ( Политика > Контент приложения ). Дополнительную информацию о том, как объявить типы служб переднего плана в Play Console, см. в разделе Общие сведения о службах переднего плана и требованиях к полноэкранному режиму .