A partir do Android 14 (nível 34 da API), é necessário declarar um tipo de serviço adequado para cada serviço em primeiro plano. Isso significa que você precisa declarar o
tipo de serviço no manifesto do app e também solicitar a permissão de serviço
em primeiro plano adequada para esse tipo (além de solicitar a permissão
FOREGROUND_SERVICE
). Além disso, dependendo do tipo de serviço em primeiro plano, talvez seja necessário
solicitar permissões de execução antes de iniciar o serviço.
Câmera
- 要在清单中
android:foregroundServiceType
下声明的前台服务类型 camera
- 要在清单中声明的权限
FOREGROUND_SERVICE_CAMERA
- 要传递给
startForeground()
的常量 FOREGROUND_SERVICE_TYPE_CAMERA
- 运行时前提条件
请求并被授予
CAMERA
运行时权限- 说明
继续在后台访问相机,例如支持多任务的视频聊天应用。
Dispositivo conectado
- Tipo de serviço em primeiro plano a ser declarado no manifesto em
android:foregroundServiceType
connectedDevice
- Permissão a ser declarada no manifesto
FOREGROUND_SERVICE_CONNECTED_DEVICE
- Constante para transmitir para
startForeground()
FOREGROUND_SERVICE_TYPE_CONNECTED_DEVICE
- Pré-requisitos do ambiente de execução
Pelo menos uma das condições a seguir precisa ser verdadeira:
Declare pelo menos uma das permissões a seguir no manifesto:
Solicitar e receber pelo menos uma das seguintes permissões de execução:
- Descrição
Interações com dispositivos externos que exigem uma conexão Bluetooth, NFC, IR, USB ou de rede.
- Alternativas
Se o app precisar fazer transferências de dados contínuas para um dispositivo externo, use o gerenciador de dispositivo complementar. Use a API de presença de dispositivo complementar para ajudar o app a continuar em execução enquanto o dispositivo complementar está no alcance.
Se o app precisar procurar dispositivos Bluetooth, use a API de verificação de Bluetooth.
Sincronização de dados
- 要在清单中声明的前台服务类型,位于
android:foregroundServiceType
dataSync
- 要在清单中声明的权限
FOREGROUND_SERVICE_DATA_SYNC
- 要传递给
startForeground()
的常量 FOREGROUND_SERVICE_TYPE_DATA_SYNC
- 运行时前提条件
- 无
- 说明
数据传输操作,例如:
- 数据上传或下载
- 备份和恢复操作
- 导入或导出操作
- 获取数据
- 本地文件处理
- 通过网络在设备和云端之间传输数据
- 替代方案
如需了解详情,请参阅数据同步前台服务的替代方案。
Saúde
- Tipo de serviço em primeiro plano a ser declarado no manifesto em
android:foregroundServiceType
health
- Permissão a ser declarada no manifesto
FOREGROUND_SERVICE_HEALTH
- Constante para transmitir para
startForeground()
FOREGROUND_SERVICE_TYPE_HEALTH
- Pré-requisitos do ambiente de execução
Pelo menos uma das condições a seguir precisa ser verdadeira:
Declare a permissão
HIGH_SAMPLING_RATE_SENSORS
no manifesto.Solicitar e receber pelo menos uma das seguintes permissões de execução:
BODY_SENSORS
na API 35 e anterioresREAD_HEART_RATE
READ_SKIN_TEMPERATURE
READ_OXYGEN_SATURATION
ACTIVITY_RECOGNITION
- Descrição
Todos os casos de uso de longa duração que oferecem suporte a apps na categoria fitness, como apps de monitoramento de atividade física.
Local
- Foreground service type to declare in manifest under
android:foregroundServiceType
location
- Permission to declare in your manifest
FOREGROUND_SERVICE_LOCATION
- Constant to pass to
startForeground()
FOREGROUND_SERVICE_TYPE_LOCATION
- Runtime prerequisites
The user must have enabled location services and the app must be granted at least one of the following runtime permissions:
- Description
Long-running use cases that require location access, such as navigation and location sharing.
- Alternatives
If your app needs to be triggered when the user reaches specific locations, consider using the geofence API instead.
Mídia
- Foreground service type to declare in manifest under
android:foregroundServiceType
mediaPlayback
- Permission to declare in your manifest
FOREGROUND_SERVICE_MEDIA_PLAYBACK
- Constant to pass to
startForeground()
FOREGROUND_SERVICE_TYPE_MEDIA_PLAYBACK
- Runtime prerequisites
- None
- Description
Continue audio or video playback from the background. Support Digital Video Recording (DVR) functionality on Android TV.
- Alternatives
If you're showing picture-in-picture video, use Picture-in-Picture mode.
Mídia em processamento
- 要在清单中的以下位置声明的前台服务类型
android:foregroundServiceType
mediaProcessing
- 在清单中声明的权限
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 或更低版本。在搭载这些版本的设备上,如果媒体处理服务达到超时期限,系统会立即缓存应用。因此,您的应用不应等待收到超时通知。相反,它应在适当情况下尽快终止前台服务或将其更改为后台服务。
Projeção de mídia
- Tipo de serviço em primeiro plano a ser declarado no manifesto em
android:foregroundServiceType
mediaProjection
- Permissão a ser declarada no manifesto
FOREGROUND_SERVICE_MEDIA_PROJECTION
- Constante a ser transmitida para
startForeground()
FOREGROUND_SERVICE_TYPE_MEDIA_PROJECTION
- Pré-requisitos de ambiente de execução
Chame o método
createScreenCaptureIntent()
antes de iniciar o serviço em primeiro plano. Isso mostra uma notificação de permissão ao usuário, que precisa conceder a permissão antes que você possa criar o serviço.Depois de criar o serviço em primeiro plano, chame
MediaProjectionManager.getMediaProjection()
.- Descrição
Projete o conteúdo em uma tela secundária ou um dispositivo externo usando as APIs
MediaProjection
. Esse conteúdo não precisa ser exclusivamente de mídia.- Alternativas
Para fazer streaming de mídia para outro dispositivo, use o SDK do Google Cast.
Microfone
- Foreground service type to declare in manifest under
android:foregroundServiceType
microphone
- 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_AUDIO
runtime permission.- Description
Continue microphone capture from the background, such as voice recorders or communication apps.
Ligação telefônica
- Tipo de serviço em primeiro plano a ser declarado no manifesto em
android:foregroundServiceType
phoneCall
- Permissão a ser declarada no manifesto
FOREGROUND_SERVICE_PHONE_CALL
- Constante a ser transmitida para
startForeground()
FOREGROUND_SERVICE_TYPE_PHONE_CALL
- Pré-requisitos de ambiente de execução
Pelo menos uma destas condições precisa ser verdadeira:
- O app declarou a permissão
MANAGE_OWN_CALLS
no arquivo de manifesto.
- O app declarou a permissão
- O app é o discador padrão pela função
ROLE_DIALER
.
- O app é o discador padrão pela função
- Descrição
Continue uma chamada usando as APIs
ConnectionService
.- Alternativas
Se você precisar fazer ligações, videochamadas ou chamadas VoIP, use a biblioteca
android.telecom
.Considere usar o
CallScreeningService
para filtrar ligações.
Mensagens remotas
- Tipo de serviço em primeiro plano a ser declarado no manifesto em
android:foregroundServiceType
remoteMessaging
- Permissão a ser declarada no manifesto
FOREGROUND_SERVICE_REMOTE_MESSAGING
- Constante para transmitir para
startForeground()
FOREGROUND_SERVICE_TYPE_REMOTE_MESSAGING
- Pré-requisitos do ambiente de execução
- Nenhum
- Descrição
- Transferir mensagens de texto de um dispositivo para outro. Ajuda na continuidade das tarefas de mensagens de um usuário ao trocar de dispositivo.
Serviço curto
- 要在清单中的以下位置声明的前台服务类型
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()
回调被视为一种最佳实践。Android 13 及更低版本中不存在
Service.onTimeout()
回调。如果同一服务在此类设备上运行,则不会出现超时,也不会发生 ANR。确保您的服务在完成处理任务后立即停止,即使它尚未收到Service.onTimeout()
回调也是如此。请务必注意,如果未遵循
shortService
的超时设置,即使应用还有其他有效的前台服务或其他应用生命周期进程,应用也会遇到 ANR。如果应用对用户可见,或满足允许从后台启动前台服务的某一豁免条件,则使用
FOREGROUND_SERVICE_TYPE_SHORT_SERVICE
参数再次调用Service.StartForeground()
会将超时时间再延长 3 分钟。如果应用对用户不可见且不满足其中一个豁免条件,则尝试启动其他前台服务(无论其类型如何)都会导致ForegroundServiceStartNotAllowedException
。即使用户为您的应用停用电池优化功能,仍然会受到 shortService FGS 的影响。
如果您启动包含
shortService
类型和另一个前台服务类型的前台服务,系统会忽略shortService
类型声明。不过,该服务仍必须遵守其他声明类型的先决条件。如需了解详情,请参阅前台服务文档。
Uso especial
- 要在清单中声明的前台服务类型
android:foregroundServiceType
specialUse
- 在清单中声明的权限
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>
Sistema isento
- Tipo de serviço em primeiro plano a ser declarado no manifesto
android:foregroundServiceType
systemExempted
- Permissão a ser declarada no manifesto
FOREGROUND_SERVICE_SYSTEM_EXEMPTED
- Constante a ser transmitida para
startForeground()
FOREGROUND_SERVICE_TYPE_SYSTEM_EXEMPTED
- Pré-requisitos de tempo de execução
- Nenhum
- Descrição
Reservado para que aplicativos do sistema e integrações específicas do sistema possam continuar usando serviços em primeiro plano.
Para usar esse tipo, um app precisa atender a pelo menos um destes critérios:
- O dispositivo está no modo de demonstração
- O app é proprietário do dispositivo
- O app é proprietário do perfil
- Apps de segurança que têm o papel
ROLE_EMERGENCY
- Apps do administrador do dispositivo
- Apps com a permissão
SCHEDULE_EXACT_ALARM
ouUSE_EXACT_ALARM
Apps de VPN (configurados em Configurações > Rede e Internet > VPN)
Caso contrário, a declaração desse tipo faz com que o sistema gere uma
ForegroundServiceTypeNotAllowedException
.
Aplicação da política do Google Play para uso de tipos de serviço em primeiro plano
Se o app for direcionado ao Android 14 ou versões mais recentes, será necessário declarar os tipos de serviço em primeiro plano na página "Conteúdo do app" do Play Console (Política > Conteúdo do app). Para mais informações sobre como declarar seus tipos de serviço em primeiro plano no Play Console, consulte Saiba mais sobre o serviço em primeiro plano e os requisitos de intent para tela cheia.