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
- 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 para transmitir a startForeground()
- FOREGROUND_SERVICE_TYPE_CAMERA
- Pré-requisitos de ambiente de execução
- Solicitar e receber a permissão de execução - CAMERA
- 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 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
- Tipo de serviço em primeiro plano a ser declarado no manifesto em
- android:foregroundServiceType
- dataSync
- Permissão a ser declarada no manifesto
- FOREGROUND_SERVICE_DATA_SYNC
- Constante para transmitir a startForeground()
- FOREGROUND_SERVICE_TYPE_DATA_SYNC
- Pré-requisitos de ambiente 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 aos serviços de sincronização de dados em primeiro plano para mais informações. 
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_SENSORSno manifesto.
- Solicitar e receber pelo menos uma das seguintes permissões de execução: - BODY_SENSORSna API 35 e anteriores
- READ_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
- Tipo de serviço em primeiro plano a ser declarado no manifesto em
- android:foregroundServiceType
- location
- Permissão a ser declarada no manifesto
- FOREGROUND_SERVICE_LOCATION
- Constante para transmitir 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 ter pelo menos uma das seguintes permissões de execução: 
- 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, use a API Geofence. 
Mídia
- Tipo de serviço em primeiro plano a ser declarado no manifesto em
- android:foregroundServiceType
- mediaPlayback
- Permissão a ser declarada no manifesto
- FOREGROUND_SERVICE_MEDIA_PLAYBACK
- Constante para transmitir a startForeground()
- FOREGROUND_SERVICE_TYPE_MEDIA_PLAYBACK
- Pré-requisitos de ambiente de execução
- Nenhum
- Descrição
- Continue a reprodução de áudio ou vídeo em segundo plano. Suporte à funcionalidade de gravação de vídeo digital (DVR) no Android TV. 
- Alternativas
- Se você estiver mostrando um vídeo picture-in-picture, use o modo picture-in-picture. 
Mídia em processamento
- Tipo de serviço em primeiro plano a ser declarado no manifesto em
- android:foregroundServiceType
- mediaProcessing
- Permissão a ser declarada no manifesto
- FOREGROUND_SERVICE_MEDIA_PROCESSING
- Constante para transmitir para startForeground()
- FOREGROUND_SERVICE_TYPE_MEDIA_PROCESSING
- Pré-requisitos do ambiente de execução
- Nenhum
- Descrição
- Serviço para realizar operações demoradas em recursos de mídia, como converter mídia em diferentes formatos. O sistema permite que esse serviço seja executado por um tempo limitado. Em circunstâncias normais, esse limite de tempo seria de 6 horas a cada 24. Esse limite é compartilhado por todos os serviços em primeiro plano - mediaProcessingde um app.
- O app precisa interromper manualmente o serviço de processamento de mídia no seguinte cenário: - Quando a operação de transcodificação terminar ou atingir um estado de falha, faça com que
o serviço chame Service.stopForeground()eService.stopSelf()para interromper o serviço completamente.
 
- Quando a operação de transcodificação terminar ou atingir um estado de falha, faça com que
o serviço chame 
- Se o período de tempo limite for atingido, o sistema vai chamar o método - Service.onTimeout(int, int)do serviço. Nesse momento, o serviço tem alguns segundos para chamar- Service.stopSelf(). Se o serviço não chamar- Service.stopSelf(), um ANR vai ocorrer com esta mensagem de erro: "Um serviço em primeiro plano de <fgs_type> não parou dentro do tempo limite: <component_name>".- Observação: - Service.onTimeout(int, int)não está disponível no Android 14 ou versões anteriores. Em dispositivos com essas versões, se um serviço de processamento de mídia atingir o período de tempo limite, o sistema vai armazenar o app em cache imediatamente. Por esse motivo, o app não deve esperar para receber uma notificação de tempo limite. Em vez disso, ele precisa encerrar o serviço em primeiro plano ou mudar para um serviço em segundo plano assim que apropriado.
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 para transmitir a 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
- Tipo de serviço em primeiro plano a ser declarado no manifesto em
- android:foregroundServiceType
- microphone
- Permissão a ser declarada no manifesto
- FOREGROUND_SERVICE_MICROPHONE
- Constante para transmitir a startForeground()
- FOREGROUND_SERVICE_TYPE_MICROPHONE
- Pré-requisitos de ambiente de execução
- Solicite e receba a permissão de execução - RECORD_AUDIO.
- Descrição
- Continue a captura do microfone em segundo plano com, por exemplo, gravadores de voz ou apps de comunicação. 
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 para transmitir a 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_CALLSno 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 - CallScreeningServicepara 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
- Tipo de serviço em primeiro plano a ser declarado no manifesto em
- android:foregroundServiceType
- shortService
- Permissão a ser declarada no manifesto
- Nenhum
- Constante para transmitir para startForeground()
- FOREGROUND_SERVICE_TYPE_SHORT_SERVICE
- Pré-requisitos do ambiente de execução
- Nenhum
- Descrição
- Conclua rapidamente trabalhos essenciais que não podem ser interrompidos ou adiados. - Esse tipo tem algumas características únicas: - Pode ser executado por um curto período de tempo (cerca de três minutos).
- Não oferece suporte a serviços fixos em primeiro plano.
- Não inicia outros serviços em primeiro plano.
- Não requer uma permissão específica do tipo, embora ainda
exija a permissão FOREGROUND_SERVICE.
- Um shortServicesó pode mudar para outro tipo de serviço se o app estiver qualificado para iniciar um novo serviço em primeiro plano.
- Um serviço em primeiro plano pode mudar o tipo para shortServicea qualquer momento. Nesse ponto, o período de tempo limite começa.
 - O tempo limite de shortService começa no momento em que - Service.startForeground()é chamado. O app precisa chamar- Service.stopSelf()ou- Service.stopForeground()antes que o tempo limite seja atingido. Caso contrário, o novo- Service.onTimeout()será chamado, dando aos apps a oportunidade de chamar- stopSelf()ou- stopForeground()para interromper o serviço.- Pouco depois que - Service.onTimeout()é chamado, o app entra em um estado em cache e não é mais considerado em primeiro plano, a menos que o usuário esteja interagindo ativamente com ele. Se o app entra nesse estado e o serviço não é interrompido, o app recebe um erro ANR. A mensagem ANR menciona- FOREGROUND_SERVICE_TYPE_SHORT_SERVICE. Por esses motivos, uma prática recomendada é implementar o callback- Service.onTimeout().- O callback - Service.onTimeout()não existe no Android 13 e nas versões anteriores. Se o mesmo serviço for executado nesses dispositivos, ele não receberá um tempo limite nem um erro ANR. Confira se o serviço é interrompido assim que a tarefa de processamento é terminada, mesmo que ele ainda não tenha recebido o callback- Service.onTimeout().- É importante observar que, se o tempo limite do - shortServicenão for respeitado, o app receberá um erro ANR mesmo que tenha outros serviços em primeiro plano válidos ou outros processos de ciclo de vida em execução.- Se um app estiver visível para o usuário ou atender a uma das isenções que permitem que serviços em primeiro plano sejam iniciados em segundo plano, chame - Service.StartForeground()novamente com o parâmetro- FOREGROUND_SERVICE_TYPE_SHORT_SERVICE, que estende o tempo limite em mais três minutos. Se o app não estiver visível para o usuário e não atender a uma das isenções, qualquer tentativa de iniciar outro serviço em primeiro plano, independente do tipo, vai causar uma- ForegroundServiceStartNotAllowedException.- Se um usuário desativar a otimização da bateria para seu app, ele ainda será afetado pelo tempo limite do shortService FGS. - Se você iniciar um serviço em primeiro plano que inclua o tipo - shortServicee outro tipo de serviço em primeiro plano, o sistema vai ignorar a declaração do tipo- shortService. No entanto, o serviço ainda precisa aderir aos pré-requisitos dos outros tipos declarados. Para mais informações, consulte a documentação de serviços em primeiro plano.
Uso especial
- Tipo de serviço em primeiro plano a ser declarado no manifesto em
- android:foregroundServiceType
- specialUse
- Permissão a ser declarada no manifesto
- FOREGROUND_SERVICE_SPECIAL_USE
- Constante para transmitir para startForeground()
- FOREGROUND_SERVICE_TYPE_SPECIAL_USE
- Pré-requisitos do ambiente 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 fornecidos são livres, e você precisa fornecer informações suficientes para que o revisor entenda por que você precisa usar o tipo- 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_ALARMouUSE_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.
