Начиная с 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:foregroundServiceType -
location - Разрешение объявить в своем манифесте
-
FOREGROUND_SERVICE_LOCATION - Константа для передачи в
startForeground() -
FOREGROUND_SERVICE_TYPE_LOCATION - Предварительные требования для выполнения
У пользователя должны быть включены службы определения местоположения, а приложению должно быть предоставлено хотя бы одно из следующих разрешений во время выполнения:
- Описание
Долгосрочные варианты использования, требующие доступа к местоположению, например навигация и совместное использование местоположения.
- Альтернативы
Если ваше приложение должно запускаться, когда пользователь достигает определенных мест, рассмотрите возможность использования вместо этого API геозон .
Мультимедиа
- Тип активной службы, который нужно объявить в манифесте в разделе
android:foregroundServiceTypemediaPlayback- Разрешение, которое нужно объявить в манифесте
FOREGROUND_SERVICE_MEDIA_PLAYBACK- Константа, передаваемая в
startForeground() FOREGROUND_SERVICE_TYPE_MEDIA_PLAYBACK- Требования к среде выполнения
- Нет
- Описание
Непрерывное воспроизведение аудио или видео в фоновом режиме. Поддержка цифрового видеорекордера на Android TV.
- Альтернативы
Если вы показываете видео в режиме "картинка в картинке", используйте режим "картинка в картинке".
Обработка файла…
- 要在清单中的以下位置声明的前台服务类型
android:foregroundServiceTypemediaProcessing- 在清单中声明的权限
FOREGROUND_SERVICE_MEDIA_PROCESSING- 要传递给
startForeground()的常量 FOREGROUND_SERVICE_TYPE_MEDIA_PROCESSING- 运行时前提条件
- 无
- 说明
用于对媒体资源执行耗时的操作(例如将媒体转换为其他格式)的服务。系统允许此服务运行的时间有限;在正常情况下,此时限为每天 24 小时中的 6 小时。(此限制由应用的所有
mediaProcessing前台服务共享。)在以下情况下,您的应用应手动停止媒体处理服务:
- 当转码操作完成或达到失败状态时,让服务调用
Service.stopForeground()和Service.stopSelf()以完全停止服务。
- 当转码操作完成或达到失败状态时,让服务调用
如果超时期限已到,系统会调用服务的
Service.onTimeout(int, int)方法。此时,该服务有几秒钟的时间来调用Service.stopSelf()。如果服务未调用Service.stopSelf(),则会发生 ANR,并显示以下错误消息:“<fgs_type> 的前台服务未在超时时间内停止:<component_name>”。注意:
Service.onTimeout(int, int)不适用于 Android 14 或更低版本。在搭载这些版本的设备上,如果媒体处理服务达到超时期限,系统会立即缓存应用。因此,您的应用不应等待收到超时通知。相反,它应在适当情况下尽快终止前台服务或将其更改为后台服务。
Проецирование медиафайлов
- Тип активной службы, который нужно объявить в манифесте в разделе
android:foregroundServiceTypemediaProjection- Разрешение, которое нужно объявить в манифесте
FOREGROUND_SERVICE_MEDIA_PROJECTION- Константа, передаваемая в
startForeground() FOREGROUND_SERVICE_TYPE_MEDIA_PROJECTION- Требования к среде выполнения
Вызовите метод
createScreenCaptureIntent()перед запуском активной службы. В этом случае пользователь увидит запрос на предоставление разрешения. Без него вы не сможете создать службу.После создания активной службы вы можете вызвать
MediaProjectionManager.getMediaProjection().- Описание
Проецирование контента на неосновной дисплей или на внешние устройства через API
MediaProjection. Это не обязательно должен быть медиаконтент.- Альтернативы
Для трансляции медиаконтента на другое устройство используйте Google Cast SDK.
Микрофон
- Тип активной службы, который нужно объявить в манифесте в разделе
android:foregroundServiceTypemicrophone- Разрешение, которое нужно объявить в манифесте
FOREGROUND_SERVICE_MICROPHONE- Константа, передаваемая в
startForeground() FOREGROUND_SERVICE_TYPE_MICROPHONE- Требования к среде выполнения
Запросите и получите динамическое разрешение
RECORD_AUDIO.- Описание
Продолжение записи с микрофона в фоновом режиме, например в диктофонах или приложениях для общения.
Телефонный звонок
- 在清单中声明的前台服务类型
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 - Предварительные требования для выполнения
- Никто
- Описание
- Передавайте текстовые сообщения с одного устройства на другое. Помогает обеспечить непрерывность выполнения задач пользователя по обмену сообщениями при переключении устройств.
Быстрое обслуживание
- 要在清单中的以下位置声明的前台服务类型
android:foregroundServiceTypeshortService- 在清单中声明的权限
- 无
- 要传递给
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()回调被视为一种最佳实践。Android 13 及更低版本中不存在
Service.onTimeout()回调。如果同一服务在此类设备上运行,则不会出现超时,也不会发生 ANR。确保您的服务在完成处理任务后立即停止,即使它尚未收到Service.onTimeout()回调也是如此。请务必注意,如果未遵循
shortService的超时设置,即使应用还有其他有效的前台服务或其他应用生命周期进程,应用也会遇到 ANR。如果应用对用户可见,或满足允许从后台启动前台服务的某一豁免条件,则使用
FOREGROUND_SERVICE_TYPE_SHORT_SERVICE参数再次调用Service.StartForeground()会将超时时间再延长 3 分钟。如果应用对用户不可见且不满足其中一个豁免条件,则尝试启动其他前台服务(无论其类型如何)都会导致ForegroundServiceStartNotAllowedException。即使用户为您的应用停用电池优化功能,仍然会受到 shortService 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 Console ( Политика > Контент приложения ). Дополнительную информацию о том, как объявить типы служб переднего плана в Play Console, см. в разделе Общие сведения о службах переднего плана и требованиях к полноэкранному режиму .