O Android 10 (nível 29 da API) e versões mais recentes impõem restrições sobre quando os apps podem ser iniciados. atividades quando o app é executado em segundo plano. Essas restrições ajudam a minimizar interrupções para o usuário e dar ao usuário mais controle sobre o que é mostrado na tela.
Este guia apresenta as notificações como uma alternativa para iniciar atividades a partir de em segundo plano. Ela também lista os casos específicos em que a restrição não se aplicam.
Exibir notificações
Em quase todos os casos, os apps em segundo plano precisam exibir notificações urgentes para fornecer informações urgentes ao usuário em vez de iniciar uma atividade diretamente. Essas notificações incluem o processamento de uma ligação recebida ou um alarme ativo relógio.
Esse sistema de alerta e lembrete baseado em notificações oferece várias vantagens para os usuários:
- Ao usar o dispositivo, o usuário vê uma notificação de alerta que permite responder. O usuário mantém o contexto atual e tem controle sobre a do conteúdo que eles veem na tela.
- As notificações com limite de tempo respeitam Regras do Não perturbe. Para exemplo, os usuários podem permitir chamadas somente de contatos específicos ou de chamadas autores de chamadas quando o modo Não perturbe estiver ativado.
- Quando a tela do dispositivo está desligada, a intent de tela cheia é iniciada imediatamente.
- Na tela Configurações do dispositivo, o usuário pode ver quais apps têm notificações enviadas recentemente, inclusive de canais de notificação específicos. Nessa tela, ele pode controlar as preferências de notificação.
Quando os apps podem iniciar atividades
Os apps executados no Android 10 ou versões mais recentes podem iniciar atividades quando: pelo menos uma das condições a seguir for atendida:
- O app tem uma janela visível, como uma atividade em primeiro plano.
- O app tem uma atividade backstack do tarefa em primeiro plano.
O app tem uma atividade na backstack de uma tarefa existente na Tela "Recentes".
O app tem uma atividade que começou muito recentemente.
O app chamado
finish()
em uma atividade muito recentemente. Isso se aplica somente quando o app tem uma atividade em primeiro plano ou uma atividade na backstack do tarefa em primeiro plano no momento em quefinish()
foi chamado.O app tem um dos serviços a seguir, que é vinculado pelo sistema. Esses e serviços podem precisar iniciar uma interface.
AccessibilityService
AutofillService
CallRedirectionService
HostApduService
InCallService
TileService
(não relevante no Android 14 (nível 34 da API) e versões mais recentes)VoiceInteractionService
VrListenerService
.
O app tem um serviço vinculado por outro app visível. O app vinculados ao serviço precisam permanecer visíveis para que o app em segundo plano iniciar atividades com sucesso.
O app recebe uma notificação
PendingIntent
no sistema. Em caso de intents pendentes para serviços e broadcast receivers, o app pode iniciar atividades por alguns segundos após o envio da intent pendente.O app recebe um
PendingIntent
enviado de um dispositivo diferente app.O aplicativo recebe uma transmissão do sistema em que se espera que ele inicie uma de ML pela UI. Os exemplos incluem
ACTION_NEW_OUTGOING_CALL
eSECRET_CODE_ACTION
. O aplicativo pode iniciar atividades por alguns segundos após o envio da transmissão.O aplicativo está associado a um dispositivo de hardware complementar por meio do
CompanionDeviceManager
API. Essa API permite que o aplicativo inicie atividades em resposta a ações que o usuário faz em um dispositivo pareado.O app é um controlador de política de dispositivo em execução no modo proprietário do dispositivo. Exemplos de casos de uso incluem dispositivos corporativos totalmente gerenciados além de dispositivos dedicados, como sinalização e quiosques.
O app recebe a permissão
SYSTEM_ALERT_WINDOW
do usuário.
A ativação é necessária ao iniciar atividades de PendingIntents
Para evitar permitir o início de atividades acidentais com base no . A partir do Android 14, há APIs explícitas que permitem que você para ativar ou desativar a concessão de permissões de app para inícios de atividade.
Os apps destinados ao Android 15 ou versões mais recentes vão deixar de ser usados implicitamente
concedendo privilégios de inicialização de atividades em segundo plano (BAL, na sigla em inglês) para o PendingIntents
que eles
criar. A aceitação explícita é necessária, para isso, estas são as opções
dependendo se o app está enviando ou criando PendingIntents
.
Pelo Remetente da PendingIntent
Os apps destinados ao Android 14 ou mais recente que vão iniciar uma PendingIntent
precisam ser
- cumprir as condições listadas e
- ativar a inicialização de atividades em segundo plano com base nessas exceções
Essa ativação só acontece se o desenvolvedor do app sabe que o app é iniciar uma atividade.
Para ativar o recurso, o app precisa transmitir um pacote ActivityOptions
com
setPendingIntentBackgroundActivityStartMode(ActivityOptions.MODE_BACKGROUND_ACTIVITY_START_ALLOWED)
PendingIntent.send()
ou métodos semelhantes.
Pelo criador da PendingIntent
Os apps destinados ao Android 15 ou versões mais recentes que criam uma PendingIntent
agora precisam
ativar explicitamente a inicialização de atividades em segundo plano se quiser que os
PendingIntents
para ser iniciado sob as condições listadas.
Na maioria dos casos, é preciso ativar o app que inicia a PendingIntent
.
No entanto, se o app de criação precisar conceder esses privilégios:
- A
PendingIntent
pode ser iniciada a qualquer momento em que o app de criação estiver visível. - A
PendingIntent
poderá ser iniciada a qualquer momento se o app de criação tiver recursos para conceder privilégios de acesso.
Para ativar o recurso, o app precisa transmitir um pacote ActivityOptions
com
setPendingIntentCreatorBackgroundActivityStartMode
(ActivityOptions.MODE_BACKGROUND_ACTIVITY_START_ALLOWED)
para o
PendingIntent.getActivity()
ou métodos semelhantes.
Leia a documentação de referência relevante para mais detalhes:
ActivityOptions.setPendingIntentBackgroundActivityStartMode
ActivityOptions.setPendingIntentCreatorBackgroundActivityStartMode