No Android 14 (nível 34 da API) e versões mais recentes, é 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 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
- Tipo de serviço em primeiro plano a ser declarado no manifesto em
android:foregroundServiceType
camera
- Permissão a ser declarada no manifesto
FOREGROUND_SERVICE_CAMERA
- Constante a ser transmitida para
startForeground()
FOREGROUND_SERVICE_TYPE_CAMERA
- Pré-requisitos de tempo de execução
Solicitar e receber a permissão de execução
CAMERA
Observação:a permissão de execução
CAMERA
está sujeita a restrições durante o uso. Por esse motivo, não é possível criar um serviço em primeiro planocamera
enquanto o app está em segundo plano, com algumas exceções. Para mais informações, consulte Restrições para iniciar serviços em primeiro plano que precisam de permissões durante o uso.- Descrição
Continue acessando a câmera em segundo plano, como em apps de chat por vídeo que permitem várias tarefas.
Dispositivo conectado
- Tipo de serviço em primeiro plano a ser declarado no manifesto
android:foregroundServiceType
connectedDevice
- Permissão a ser declarada no manifesto
FOREGROUND_SERVICE_CONNECTED_DEVICE
- Constante a ser transmitida para
startForeground()
FOREGROUND_SERVICE_TYPE_CONNECTED_DEVICE
- Pré-requisitos de tempo 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:
Solicite e receba 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 uma transferência contínua de dados para um dispositivo externo, use o gerenciador de dispositivos complementar. Use a API de presença de dispositivo complementar para ajudar o app a continuar em execução enquanto o dispositivo complementar estiver ao alcance.
Se o app precisar procurar dispositivos Bluetooth, use a API Bluetooth Scan.
Sincronização de dados
- Tipo de serviço em primeiro plano a ser declarado no manifesto
android:foregroundServiceType
dataSync
- Permissão a ser declarada no manifesto
FOREGROUND_SERVICE_DATA_SYNC
- Constante a ser transmitida para
startForeground()
FOREGROUND_SERVICE_TYPE_DATA_SYNC
- Pré-requisitos de tempo de execução
- Nenhum
- Descrição
Operações de transferência de dados, como as seguintes:
- Upload ou download de dados
- Operações de backup e restauração
- Operações de importação ou exportação
- Busca de dados
- Processamento local de arquivos
- Transferência de dados entre um dispositivo e a nuvem por uma rede
- Alternativas
Consulte Alternativas à sincronização de dados para serviços em primeiro plano para informações detalhadas.
Saúde
- 要在其清单中声明的前台服务类型
android:foregroundServiceType
health
- 在清单中声明的权限
FOREGROUND_SERVICE_HEALTH
- 要传递给
startForeground()
的常量 FOREGROUND_SERVICE_TYPE_HEALTH
- 运行时前提条件
必须至少满足以下其中一个条件:
在清单中声明
HIGH_SAMPLING_RATE_SENSORS
权限。请求并获得以下至少一项运行时权限:
注意:
BODY_SENSORS
运行时权限受使用时限制。因此,您无法创建在应用在后台运行时使用身体传感器的health
前台服务,但存在一些例外情况。如需了解详情,请参阅有关启动需要运行时权限的前台服务的限制。- 说明
为健身类别的应用(例如锻炼追踪器)提供支持的所有长时间运行的用例。
Local
- Tipo de serviço em primeiro plano a ser declarado no manifesto em
android:foregroundServiceType
location
- Permissão para declarar no manifesto
FOREGROUND_SERVICE_LOCATION
- Constante a ser transmitida para
startForeground()
FOREGROUND_SERVICE_TYPE_LOCATION
- Pré-requisitos do ambiente de execução
O usuário precisa ter ativado os Serviços de localização, e o app precisa receber pelo menos uma das seguintes permissões de execução:
Observação:para verificar se o usuário ativou os serviços de localização e concedeu acesso às permissões de execução, use
PermissionChecker#checkSelfPermission()
.Observação:as permissões de execução de local estão sujeitas a restrições durante o uso. Por esse motivo, não é possível criar um serviço em primeiro plano
location
enquanto o app está em segundo plano, a menos que você tenha recebido a permissão de execuçãoACCESS_BACKGROUND_LOCATION
. Para mais informações, consulte Restrições para iniciar serviços em primeiro plano que precisam de permissões durante o uso.- Descrição
Casos de uso de longa duração que exigem acesso à localização, como navegação e compartilhamento de local.
- Alternativas
Se o app precisar ser acionado quando o usuário chegar a locais específicos, considere usar a API Geoofence.
Mídia
- 要在其清单中声明的前台服务类型
android:foregroundServiceType
mediaPlayback
- 在清单中声明的权限
FOREGROUND_SERVICE_MEDIA_PLAYBACK
- 要传递给
startForeground()
的常量 FOREGROUND_SERVICE_TYPE_MEDIA_PLAYBACK
- 运行时前提条件
- 无
- 说明
- 在后台继续播放音频或视频。在 Android TV 上支持数字视频录制 (DVR) 功能。
- 替代方案
- 如果您显示的是画中画视频,请使用画中画模式。
Projeção de mídia
- Tipo de serviço em primeiro plano a ser declarado no manifesto
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 tempo 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 concedê-la antes de você 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 em outro dispositivo, use o SDK do Google Cast.
Microfone
- 要在其清单中声明的前台服务类型
android:foregroundServiceType
microphone
- 在清单中声明的权限
FOREGROUND_SERVICE_MICROPHONE
- 要传递给
startForeground()
的常量 FOREGROUND_SERVICE_TYPE_MICROPHONE
- 运行时前提条件
请求并获得
RECORD_AUDIO
运行时权限。注意:
RECORD_AUDIO
运行时权限受使用时限制。因此,当您的应用位于后台时,您无法创建microphone
前台服务,但存在一些例外情况。如需了解详情,请参阅有关启动需要运行时权限的前台服务的限制。- 说明
在后台继续捕获麦克风内容,例如录音器或通信应用。
Ligação telefônica
- Tipo de serviço em primeiro plano a ser declarado no manifesto
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 tempo 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
- Esse é o app de discador padrão com o papel
ROLE_DIALER
.
- Esse é o app de discador padrão com o papel
- Descrição
Continue uma chamada usando as APIs
ConnectionService
.- Alternativas
Se você precisar fazer chamadas telefônicas, de vídeo ou VoIP, considere usar a biblioteca
android.telecom
.Use o
CallScreeningService
para filtrar ligações.
Mensagens remotas
- Tipo de serviço em primeiro plano a ser declarado no manifesto
android:foregroundServiceType
remoteMessaging
- Permissão a ser declarada no manifesto
FOREGROUND_SERVICE_REMOTE_MESSAGING
- Constante a ser transmitida para
startForeground()
FOREGROUND_SERVICE_TYPE_REMOTE_MESSAGING
- Pré-requisitos de tempo 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
- Tipo de serviço em primeiro plano a ser declarado no manifesto
android:foregroundServiceType
specialUse
- Permissão a ser declarada no manifesto
FOREGROUND_SERVICE_SPECIAL_USE
- Constante a ser transmitida para
startForeground()
FOREGROUND_SERVICE_TYPE_SPECIAL_USE
- Pré-requisitos de tempo de execução
- Nenhum
- Descrição
Abrange todos os casos de uso de serviço em primeiro plano válidos que não são abrangidos por outros tipos de serviço em primeiro plano.
Além de declarar o tipo de serviço em primeiro plano
FOREGROUND_SERVICE_TYPE_SPECIAL_USE
, os desenvolvedores precisam declarar casos de uso no manifesto. Para fazer isso, especifique o elemento<property>
no elemento<service>
. Esses valores e os casos de uso correspondentes são analisados quando você envia o app no Google Play Console. Os casos de uso que você fornece têm formato livre, e é preciso fornecer informações suficientes para que o revisor entenda por que você precisa usar o tipospecialUse
.<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
- 要在其清单中声明的前台服务类型
android:foregroundServiceType
systemExempted
- 在清单中声明的权限
FOREGROUND_SERVICE_SYSTEM_EXEMPTED
- 要传递给
startForeground()
的常量 FOREGROUND_SERVICE_TYPE_SYSTEM_EXEMPTED
- 运行时前提条件
- 无
- 说明
为系统应用和特定系统集成预留,以便继续使用前台服务。
如需使用此类型,应用必须至少满足以下条件之一:
- 设备处于演示模式状态
- 应用是设备所有者
- 应用是性能分析器所有者
- 属于具有
ROLE_EMERGENCY
角色的安全应用 - 属于设备管理应用
- 具有
SCHEDULE_EXACT_ALARM
或USE_EXACT_ALARM
权限的应用 VPN 应用(通过设置 > 网络和互联网 > VPN 进行配置)
否则,声明此类型会导致系统抛出
ForegroundServiceTypeNotAllowedException
。
Aplicação da política do Google Play para uso de tipos de serviço em primeiro plano
Caso o app seja destinado ao Android 14 ou versões mais recentes, declare os tipos de serviço em primeiro plano na página de conteúdo do app no Play Console (Política > Conteúdo do app). Para mais informações sobre como declarar os tipos de serviço em primeiro plano no Play Console, consulte Noções básicas sobre o serviço em primeiro plano e os requisitos de intent para tela cheia.