Mudanças de comportamento: todos os apps

A plataforma Android 13 inclui mudanças de comportamento que podem afetar o app. As mudanças de comportamento abaixo se aplicam a todos os apps quando executados no Android 13, independente da targetSdkVersion. Teste o app e o modifique conforme necessário para que ele ofereça suporte a essas mudanças.

Consulte também a lista de mudanças de comportamento que afetam apenas os apps destinados ao Android 13.

Desempenho e bateria

Gerenciador de tarefas dos serviços em primeiro plano (FGS)

Na parte de baixo da gaveta de notificações, há um botão que indica o
  número de apps sendo executados em segundo plano. Ao pressionar
  esse botão, uma caixa de diálogo vai ser exibida, listando os nomes de diferentes apps. O
  botão "Parar" fica à direita de cada app.
Figura 1. Fluxo de trabalho do gerenciador de tarefas dos serviços em primeiro plano (FGS) em dispositivos com o Android 13.

O Android 13 (API de nível 33) permite que os usuários interrompam os serviços em primeiro plano na gaveta de notificações, independentemente da versão do SDK de destino. Essa nova funcionalidade, chamada de gerenciador de tarefas do FGS, exibe uma lista de apps que estão executando serviços em primeiro plano. A lista tem o rótulo Apps ativos. Ao lado de cada app há um botão Parar. A Figura 1 ilustra o fluxo de trabalho do gerenciador de tarefas do FGS em um dispositivo com o Android 13.

Saiba mais sobre o gerenciador de tarefas do FGS.

Melhor processamento de jobs de pré-busca usando JobScheduler

Com o JobScheduler, os apps podem marcar jobs específicos como jobs de "pré-busca" (usando JobInfo.Builder.setPrefetch()), o que faz com que esses jobs sejam executados logo antes próxima inicialização do app para melhorar a experiência do usuário. Antes, o JobScheduler usava somente o indicador para permitir que os jobs de pré-busca usassem dados livres ou em excesso de maneira oportuna.

No Android 13, o sistema agora tenta determinar a próxima vez que um app vai ser iniciado e usa essa estimativa para executar jobs de pré-busca de dados. É importante testar o uso de jobs de pré-busca para qualquer trabalho que o app queira executar antes da próxima inicialização do app.

Uso de recursos da bateria

O Android 13 (API de nível 33) introduz o uso de recursos da bateria, que oferece várias maneiras para o sistema gerenciar melhor a duração da bateria do dispositivo:

Cotas de alta prioridade do Firebase Cloud Messaging (FCM)

O Android 13 (API de nível 33) atualiza as cotas do Firebase Cloud Messaging (FCM) para melhorar a confiabilidade do envio de mensagens FCM de alta prioridade para apps que mostram notificações em resposta a esse tipo de mensagem. Os seguintes comportamentos mudaram no Android 13 (API de nível 33):

  • Os buckets do App em espera não determinam mais quantos FCMs de alta prioridade podem ser usados pelo app.
  • As cotas de alta prioridade do FCM são ajustadas de acordo com o número de notificações exibidas ao usuário em resposta às mensagens FCM de alta prioridade.

Como nas versões anteriores do Android, as mensagens FCM de alta prioridade que ultrapassam a cota são rebaixadas para prioridade normal. Ao iniciar serviços em primeiro plano em resposta a uma mensagem FCM, é recomendável consultar o resultado de RemoteMessage.getPriority() para confirmar se ele é PRIORITY_HIGH ou, então, processar possíveis exceções ForegroundServiceStartNotAllowedException.

Caso seu aplicativo nem sempre exiba notificações em resposta a mensagens FCM de alta prioridade, recomendamos que você mude a prioridade para normal. Assim, as mensagens que precisarem gerar notificações não serão rebaixadas para prioridade normal.

Privacidade

Permissão de execução para notificações

O Android 13 (API de nível 33) introduz uma nova permissão de execução para notificações: POST_NOTIFICATIONS. Essa mudança ajuda os usuários a se concentrarem nas notificações que eles consideram mais importantes.

Recomendamos que você destine o app ao Android 13 o quanto antes para fazer uso do maior controle e da maior flexibilidade proporcionados por esse recurso.

Saiba mais sobre as práticas recomendadas de permissões do app.

Ocultar conteúdo confidencial da área de transferência

Se o app permitir que os usuários copiem conteúdo confidencial, para a área de transferência, como senhas ou dados de cartões de crédito, adicione uma sinalização à ClipDescription do ClipData antes de chamar ClipboardManager#setPrimaryClip(). Essa sinalização impede que conteúdo confidencial seja exibido na visualização.

Visualização do texto copiado sem sinalização de conteúdo confidencial.
Visualização do texto copiado sem sinalização de conteúdo confidencial.
Visualização do texto copiado com sinalização de conteúdo confidencial.
Visualização do texto copiado com sinalização de conteúdo confidencial.

Para sinalizar a presença de conteúdo confidencial, adicione um booleano extra à ClipDescription. Isso precisa ser feito por todos os apps, independentemente do nível desejado da API.


// When your app targets API level 33 or higher
clipData.apply {
    description.extras = PersistableBundle().apply {
        putBoolean(ClipDescription.EXTRA_IS_SENSITIVE, true)
    }
}

// If your app targets a lower API level
clipData.apply {
    description.extras = PersistableBundle().apply {
        putBoolean("android.content.extra.IS_SENSITIVE", true)
    }
}

Para saber mais sobre a nova IU da área de transferência, acesse a página do recurso copiar e colar.

Segurança

Migrar do uso de ID de usuário compartilhado

Caso o app use o atributo android:sharedUserId, que foi descontinuado, e não dependa mais da funcionalidade dele, defina o atributo android:sharedUserMaxSdkVersion como 32, conforme mostrado no snippet de código a seguir:

<manifest ...>
    <!-- To maintain backward compatibility, continue to use
         "android:sharedUserId" if you already added it to your manifest. -->
    android:sharedUserId="SHARED_PACKAGE_NAME"
    android:sharedUserMaxSdkVersion="32"
    ...
</manifest>

Esse novo atributo informa ao sistema que o app não usa mais um ID de usuário compartilhado. Se o app declarar android:sharedUserMaxSdkVersion e for instalado pela primeira vez em dispositivos com o Android 13 ou versões mais recente, ele vai se comportar como se android:sharedUserId nunca houvesse sido definido. Os apps atualizados ainda usam o ID de usuário compartilhado existente.

Os IDs de usuário compartilhados causam um comportamento não determinista no gerenciador de pacotes. Em vez disso, o app precisa usar mecanismos de comunicação adequados, como serviços e provedores de conteúdo, para facilitar a interoperabilidade entre os componentes compartilhados.

Experiência do usuário

Seletores de idioma no app

O Android 13 introduz um local centralizado nas configurações do smartphone para definir a seleção de idioma por app. Caso seu app seja compatível com vários idiomas, recomendamos declarar o atributo android:localeConfig no manifesto para que os usuários possam mudar as configurações de idioma do app no mesmo local em que isso pode ser feito para os outros aplicativos.

Além disso, os apps que usam seletores de idioma personalizados precisam usar as novas APIs para seleção de idioma por app. O uso das novas APIs ajuda a garantir que o app será exibido no idioma de preferência do usuário, seja ele selecionado no seletor de idioma do app ou nas configurações do smartphone.

Essas mudanças não afetam os apps que não oferecem suporte a vários idiomas.

Principal recurso

Remoção da cópia legada da implementação do serviço de voz

No Android 13, a implementação de SpeechService foi removida do Google app, incluindo

o IME do Voice, o RecognitionService e uma API baseada na intent.

As seguintes mudanças foram implementadas no Android 12:

  • As funcionalidades SpeechService foram migradas para o app Serviços de voz do Google, que passou a ser o provedor SpeechService padrão.
  • A funcionalidade RecognitionService foi movida para o app Inteligência do sistema Android, a fim de oferecer suporte para o reconhecimento de fala no dispositivo.

Para ajudar a manter a compatibilidade do app no Android 12, o Google app usa uma atividade em trampolim para desviar o tráfego para os Serviços de voz do Google. Essa atividade foi removida no Android 13.

Os apps precisam usar o provedor padrão do dispositivo para o SpeechService, em vez de codificar um app específico.