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.

Performance e bateria

Gerenciador de tarefas

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 , que permite aos usuários interromper apps que têm serviços em primeiro plano em andamento. Esse fluxo de trabalho aparece apenas em dispositivos com o Android 13 ou versões mais recentes.

No Android 13 (nível 33 da API) e versões mais recentes, os usuários podem concluir um fluxo de trabalho na gaveta de notificações para interromper apps que têm serviços em primeiro plano em andamento, conforme mostrado na Figura 1. Essa funcionalidade é conhecida como gerenciador de tarefas. Os apps precisam ser capazes de lidar com essa interrupção iniciada pelo usuário.

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 (nível 33 da API) e versões mais recentes, o sistema tenta determinar a próxima vez que um app vai ser iniciado e usa essa estimativa para executar jobs de pré-busca. É 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 (nível 33 da API) oferece estas maneiras para o sistema gerenciar melhor a duração da bateria do dispositivo:

Ao testar seu app com essas mudanças, verifique o seguinte:

  • Teste como o app responde quando o sistema o coloca no bucket"restrito" de apps em espera. Use o comando abaixo do Android Debug Bridge (ADB) para atribuir o app a esse bucket:

    adb shell am set-standby-bucket PACKAGE_NAME restricted
    
  • Teste como seu app responde às seguintes restrições que geralmente se aplicam a apps em estado"restrito" para o uso da bateria em segundo plano:

    • Não é possível iniciar serviços em primeiro plano
    • Serviços em primeiro plano existentes são removidos
    • Alarmes não são acionados
    • Jobs não são executados

    Use o seguinte comando ADB para colocar o app nesse estado "restrito":

    adb shell cmd appops set PACKAGE_NAME RUN_ANY_IN_BACKGROUND ignore
    

Cotas de alta prioridade do Firebase Cloud Messaging (FCM)

O Android 13 (nível 33 da API) 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 mostre 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 vão ser rebaixadas para prioridade normal.

Privacidade

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

O Android 13 (nível 33 da API) 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 is compiled with the API level 33 SDK or higher
clipData.apply {
    description.extras = PersistableBundle().apply {
        putBoolean(ClipDescription.EXTRA_IS_SENSITIVE, true)
    }
}

// If your app is compiled with a lower SDK
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 abaixo:

<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

Notificações de serviço em primeiro plano dispensáveis

Em dispositivos com o Android 13 ou versões mais recentes, os usuários podem dispensar as notificações associadas a serviços em primeiro plano por padrão.

Principal recurso

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

O Android 13 remove a implementação de SpeechService, incluindo o IME de voz, RecognitionService e uma API baseada em intents do Google app.

As mudanças abaixo 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.