Начиная с 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: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
- Предварительные требования для выполнения
У пользователя должны быть включены службы определения местоположения, а приложению должно быть предоставлено хотя бы одно из следующих разрешений во время выполнения:
- Описание
Долгосрочные варианты использования, требующие доступа к местоположению, например навигация и совместное использование местоположения.
- Альтернативы
Если ваше приложение должно запускаться, когда пользователь достигает определенных мест, рассмотрите возможность использования вместо этого 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> не остановилась в течение времени ожидания: <comComponent_name> ».Примечание .
Service.onTimeout(int, int)
недоступен на Android 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
в своем файле манифеста.
- Приложение объявило разрешение
- Приложение - это приложение Default Dialer через роль
ROLE_DIALER
.
- Приложение - это приложение Default Dialer через роль
- Описание
Продолжить текущий вызов с помощью API
ConnectionService
.- Альтернативы
Если вам необходимо совершать телефонные, видео- или VoIP-звонки, рассмотрите возможность использования библиотеки
android.telecom
.Рассмотрите возможность использования
CallScreeningService
для фильтрации звонков.
Удаленный обмен сообщениями
- Foreground service type to declare in manifest under
android:foregroundServiceType
remoteMessaging
- Permission to declare in your manifest
FOREGROUND_SERVICE_REMOTE_MESSAGING
- Constant to pass to
startForeground()
FOREGROUND_SERVICE_TYPE_REMOTE_MESSAGING
- Runtime prerequisites
- None
- Description
- Transfer text messages from one device to another. Assists with continuity of a user's messaging tasks when they switch devices.
Короткий срок службы
- Foreground service type to declare in manifest under
android:foregroundServiceType
shortService
- 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_SERVICE
permission. - A
shortService
can 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
shortService
at 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
shortService
is 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_SERVICE
parameter 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
shortService
type and another foreground service type, the system ignores theshortService
type 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 Console ( Политика > Контент приложения ). Дополнительную информацию о том, как объявить типы служб переднего плана в Play Console, см. в разделе Общие сведения о службах переднего плана и требованиях к полноэкранному режиму .