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
- Foreground service type to declare in manifest under
android:foregroundServiceType camera- Permission to declare in your manifest
FOREGROUND_SERVICE_CAMERA- Constant to pass to
startForeground() FOREGROUND_SERVICE_TYPE_CAMERA- Runtime prerequisites
Request and be granted the
CAMERAruntime permission- Description
Continue to access the camera from the background, such as video chat apps that allow for multitasking.
Dispositivo conectado
- Foreground service type to declare in manifest under
android:foregroundServiceTypeconnectedDevice- Permission to declare in your manifest
FOREGROUND_SERVICE_CONNECTED_DEVICE- Constant to pass to
startForeground() FOREGROUND_SERVICE_TYPE_CONNECTED_DEVICE- Runtime prerequisites
At least one of the following conditions must be true:
Declare at least one of the following permissions in your manifest:
Request and be granted at least one of the following runtime permissions:
- Description
Interactions with external devices that require a Bluetooth, NFC, IR, USB, or network connection.
- Alternatives
If your app needs to do continuous data transfer to an external device, consider using the companion device manager instead. Use the companion device presence API to help your app stay running while the companion device is in range.
If your app needs to scan for bluetooth devices, consider using the Bluetooth scan API instead.
Sincronização de dados
- Tipo de serviço em primeiro plano a ser declarado no manifesto em
android:foregroundServiceTypedataSync- 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:foregroundServiceTypehealth- 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 anterioresREAD_HEART_RATEREAD_SKIN_TEMPERATUREREAD_OXYGEN_SATURATIONACTIVITY_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:foregroundServiceTypelocation- 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:foregroundServiceTypemediaPlayback- 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
- Tipo de serviço em primeiro plano a ser declarado no manifesto em
android:foregroundServiceTypemediaProcessing- 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 chamarService.stopSelf(). Se o serviço não chamarService.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
- Foreground service type to declare in manifest under
android:foregroundServiceTypemediaProjection- Permission to declare in your manifest
FOREGROUND_SERVICE_MEDIA_PROJECTION- Constant to pass to
startForeground() FOREGROUND_SERVICE_TYPE_MEDIA_PROJECTION- Runtime prerequisites
Call the
createScreenCaptureIntent()method before starting the foreground service. Doing so shows a permission notification to the user; the user must grant the permission before you can create the service.After you have created the foreground service, you can call
MediaProjectionManager.getMediaProjection().- Description
Project content to non-primary display or external device using the
MediaProjectionAPIs. This content doesn't have to be exclusively media content.- Alternatives
To stream media to another device, use the Google Cast SDK.
Microfone
- Foreground service type to declare in manifest under
android:foregroundServiceTypemicrophone- 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_AUDIOruntime 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:foregroundServiceTypephoneCall- 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 em andamento 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:foregroundServiceTyperemoteMessaging- 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:foregroundServiceTypeshortService- 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 chamarService.stopSelf()ouService.stopForeground()antes que o tempo limite seja atingido. Caso contrário, o novoService.onTimeout()será chamado, dando aos apps a oportunidade de chamarstopSelf()oustopForeground()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 mencionaFOREGROUND_SERVICE_TYPE_SHORT_SERVICE. Por esses motivos, uma prática recomendada é implementar o callbackService.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 callbackService.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âmetroFOREGROUND_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 umaForegroundServiceStartNotAllowedException.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 tiposhortService. 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
- Foreground service type to declare in manifest under
android:foregroundServiceTypespecialUse- Permission to declare in your manifest
FOREGROUND_SERVICE_SPECIAL_USE- Constant to pass to
startForeground() FOREGROUND_SERVICE_TYPE_SPECIAL_USE- Runtime prerequisites
- None
- Description
Covers any valid foreground service use cases that aren't covered by the other foreground service types.
In addition to declaring the
FOREGROUND_SERVICE_TYPE_SPECIAL_USEforeground service type, developers should declare use cases in the manifest. To do so, they specify the<property>element within the<service>element. These values and corresponding use cases are reviewed when you submit your app in the Google Play Console. The use cases you provide are free-form, and you should make sure to provide enough information to let the reviewer see why you need to use thespecialUsetype.<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:foregroundServiceTypesystemExempted- 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
If your app targets Android 14 or higher, you'll need to declare your app's foreground service types in the Play Console's app content page (Policy > App content). For more information on how to declare your foreground service types in Play Console, see Understanding foreground service and full-screen intent requirements.