Recursos e APIs do Android 9

O Android 9 (nível 28 da API) introduz ótimos recursos e funcionalidades novos para usuários e desenvolvedores. Este documento destaca as novidades para os desenvolvedores.

Para saber mais sobre as novas APIs, leia a Relatório de diferenças da API ou acesse a Referência da API do Android. Confira também Mudanças de comportamento do Android 9 para saber mais sobre áreas em que as mudanças na plataforma podem afetar seus apps.

Posicionamento em ambiente fechado com RTT do Wi-Fi

As novas APIs de RTT oferecem suporte ao posicionamento interno nos seus apps.

O Android 9 adiciona suporte de plataforma para o protocolo Wi-Fi IEEE 802.11-2016, também conhecido como Wi-Fi Round-Trip-Time (RTT), para que você possa aproveitar o posicionamento em ambientes internos nos apps.

Em dispositivos com suporte a hardware e o Android 9, os apps podem usar as APIs de RTT para medir a distância até os pontos de acesso (APs) Wi-Fi próximos com capacidade para RTT. O dispositivo precisa ter os serviços de localização e a verificação de Wi-Fi ativados (em Configurações > Localização), e o app precisa ter a permissão ACCESS_FINE_LOCATION. O dispositivo não precisa se conectar aos pontos de acesso para usar o RTT. Para manter a privacidade, somente o celular pode determinar a distância até o Ponto de acesso; os pontos de acesso não têm essas informações.

Se seu dispositivo medir a distância até três ou mais pontos de acesso, você pode usar um algoritmo de multilateração para estimar a posição do dispositivo que melhor se adapta medições. Normalmente, a precisão do resultado é de 1 a 2 metros.

Com esse nível de precisão, você consegue criar novas experiências, como navegação dentro de edifícios e serviços baseados em localização precisa, como controle de voz sem ambiguidades (por exemplo, "Acenda esta luz") e informações baseadas em localização (como "Este produto tem ofertas especiais?").

Consulte a API Wi-Fi RTT em uso no App de demonstração Android WifiRttScan (link em inglês).

Para mais informações, consulte Local do Wi-Fi: alcance com RTT.

Suporte a corte de tela

Tela de opções do desenvolvedor mostrando diferentes tamanhos de corte

Como testar o corte de tela usando o emulador

O Android 9 oferece suporte às telas de ponta a ponta mais recentes que contêm cortes de tela para câmeras e alto-falantes. A classe DisplayCutout permite descobrir o local e a forma das áreas não funcionais em que o conteúdo não pode ser mostrado. Para determinar a existência e o posicionamento de essas áreas de corte, use o getDisplayCutout() .

Um novo atributo de layout de janela, layoutInDisplayCutoutMode, permite que o app disponha o conteúdo em torno dos cortes do dispositivo. Você pode definir esse atributo a um dos seguintes valores:

É possível simular um corte de tela em qualquer dispositivo ou emulador que execute o Android 9 da seguinte maneira:

  1. Ative as opções do desenvolvedor.
  2. Na tela Opções do desenvolvedor, role para baixo até a seção Desenho e selecione Simular uma tela com corte.
  3. Selecione o tamanho do corte.
.

Notificações

O Android 9 introduz diversos aprimoramentos nas notificações. Todos esses aprimoramentos estão disponíveis para desenvolvedores que usam o nível de API 28 ou mais recente.

Notificações de mensagens

MessagingStyle com foto anexada.

Notificação de mensagens

MessagingStyle com respostas e conversa.

Para conferir um exemplo de código que usa notificações, incluindo recursos do Android 9, consulte o Exemplo de pessoas (em inglês).

Experiência de mensagens aprimorada

A partir do Android 7.0 (API de nível 24), você pode adicionar uma ação para responder mensagens ou digitar outros textos diretamente de uma notificação. O Android 9 aprimora esse recurso da seguinte maneira:

  • Suporte simplificado para participantes de conversas: o Person é usada para identificar as pessoas envolvidas em uma conversa, incluindo seus avatares e URIs. Muitas outras APIs, como addMessage(), Agora, usamos a classe Person em vez de um CharSequence. A classe Person também oferece suporte ao padrão de design Builder.

  • Compatibilidade com imagens: o Android 9 agora exibe imagens nas notificações de mensagens em celulares. Você pode usar setData() na mensagem para exibir uma imagem. O snippet de código a seguir demonstra como criar uma Person e uma mensagem que contém uma imagem.

Kotlin

// Create new Person.
val sender = Person()
        .setName(name)
        .setUri(uri)
        .setIcon(null)
        .build()
// Create image message.
val message = Message("Picture", time, sender)
        .setData("image/", imageUri)
val style = Notification.MessagingStyle(getUser())
        .addMessage("Check this out!", 0, sender)
        .addMessage(message)

Java

// Create new Person.
Person sender = new Person()
        .setName(name)
        .setUri(uri)
        .setIcon(null)
        .build();
// Create image message.
Message message = new Message("Picture", time, sender)
        .setData("image/", imageUri);
Notification.MessagingStyle style = new Notification.MessagingStyle(getUser())
        .addMessage("Check this out!", 0, sender)
        .addMessage(message);
  • Salvar respostas como rascunhos: o app pode recuperar o EXTRA_REMOTE_INPUT_DRAFT enviado pelo sistema quando um usuário fecha acidentalmente uma notificação de mensagem. Você pode usar esse extra para pré-preencher campos de texto no aplicativo, para que os usuários possam terminar a resposta.

  • Identificar se uma conversa é de grupo: use setGroupConversation() para identificar uma conversa como sendo de grupo ou não.

  • Definir a ação semântica de um intent: o método setSemanticAction() permite que você dê um significado semântico a uma ação, como "marcar como lido", "excluir", "responder" e assim por diante.

  • Resposta inteligente: o Android 9 oferece suporte às mesmas respostas sugeridas disponíveis no seu app de mensagens. Usar RemoteInput.setChoices() para fornecer uma matriz de respostas padrão ao usuário.

Configurações do canal, transmissões e Não perturbe

O Android 8.0 introduziu os Canais de notificação, permitindo que você crie canal personalizável pelo usuário para cada tipo de notificação que você queira exibir. O Android 9 simplifica as configurações de canal com as seguintes modificações:

  • Bloqueio de grupos de canais: agora os usuários podem bloquear grupos inteiros de canais nas configurações de notificação de um app. Você pode usar o método isBlocked() para identificar quando um grupo está bloqueado e, consequentemente, não enviar notificações para os canais desse grupo.

    Além disso, o app pode consultar as configurações atuais do grupo de canais usando o novo getNotificationChannelGroup() .

  • Novos tipos de intents de transmissão: o sistema Android agora envia intents de transmissão quando o estado de bloqueio de canais de notificação e grupos de canais muda. O app proprietário do canal ou grupo bloqueado pode detectar essas intents e e reagir de acordo. Para mais informações sobre essas ações de intent e extras, consulte a lista de constantes atualizada na NotificationManager de referência. Para saber mais sobre como reagir a intents de transmissão, consulte Transmissões.

  • NotificationManager.Policy tem três novas categorias de prioridade "Não perturbe":

  • O NotificationManager.Policy também tem sete novas constantes "Não perturbe" que você pode usar para suprimir a interrupção visual:

Suporte a várias câmeras e atualizações de câmera

Em dispositivos que executam o Android 9, é possível acessar streams simultaneamente de duas ou mais câmeras físicas. Em dispositivos com duas câmeras frontais ou traseiras, você pode criar recursos inovadores que não são possíveis com apenas uma câmera, como zoom, bokeh e visão estéreo. A API também permite chamar um fluxo de uma câmera lógica ou combinada que alterna automaticamente entre duas ou mais câmeras.

Outras melhorias na câmera incluem parâmetros de sessão adicionais que ajudam a reduzir atrasos durante a captura inicial, bem como compartilhamento de superfície que permite que clientes da câmera processem vários casos de uso sem precisar parar e iniciar o streaming da câmera. Também adicionamos APIs para suporte a flash baseado na tela e acesso a carimbos de data/hora OIS para estabilização de imagem e efeitos especiais no app.

No Android 9, o recurso de várias câmeras API oferece suporte a câmeras monocromáticas em dispositivos FULL ou LIMITED. A saída monocromática é obtida por meio do YUV_420_888 em um formato com Y em escala de cinza, U (Cb) como 128 e V (Cr) como 128.

O Android 9 também oferece suporte a câmeras USB/UVC externas em dispositivos compatíveis.

ImageDecoder para drawables e bitmaps

O Android 9 introduz a classe ImageDecoder, que oferece uma abordagem moderna para a decodificação de imagens. Usar esta turma em vez de BitmapFactory. e BitmapFactory.Options APIs de terceiros.

ImageDecoder permite criar um Drawable ou uma Bitmap de um buffer de bytes, um arquivo ou um URI. Para decodificar uma imagem, primeiro chame createSource() com a origem da imagem codificada. Em seguida, chame decodeDrawable() ou decodeBitmap() transmitindo o objeto ImageDecoder.Source para criar um Drawable ou um Bitmap. Para alterar o padrão, transmita OnHeaderDecodedListener para decodeDrawable() ou decodeBitmap(). ImageDecoder chama onHeaderDecoded() com a largura e a altura padrão da imagem quando esses valores são conhecidos. Se a imagem codificada for um GIF ou WebP animado, decodeDrawable() vai retornar um Drawable que é uma instância da classe AnimatedImageDrawable.

Há diferentes métodos que podem ser usados para definir as propriedades de uma imagem:

  • Para dimensionar a imagem decodificada para um tamanho exato, transmita as dimensões de destino para setTargetSize(). Também é possível dimensionar imagens usando um tamanho de exemplo. Transmita o tamanho da amostra diretamente para setTargetSampleSize()
  • Para cortar uma imagem dentro do intervalo da imagem dimensionada, chame setCrop().
  • Para criar um bitmap mutável, transmita true para setMutableRequired().

O ImageDecoder também permite adicionar efeitos personalizados e complicados a uma imagem como cantos arredondados ou máscaras circulares. Use setPostProcessor() com uma instância da classe PostProcessor para executar os comandos de desenho que quiser.

Animação

O Android 9 apresenta a AnimatedImageDrawable para desenhar e exibir imagens animadas GIF e WebP. O AnimatedImageDrawable funciona de forma semelhante a AnimatedVectorDrawable, já que a linha de execução de renderização gera as animações de AnimatedImageDrawable. O thread de renderização também usa um thread de worker para decodificar, de forma que a decodificação não interfira com outras operações no thread de renderização. Com essa implementação, que seu app mostre uma imagem animada sem gerenciar as atualizações ou interferir em outros eventos na linha de execução de interface do seu app.

Um AnimatedImageDrawable pode ser decodificado usando uma instância do ImageDecoder. O seguinte snippet de código mostra como usar ImageDecoder para decodificar AnimatedImageDrawable:

Kotlin

@Throws(IOException::class)
private fun decodeImage() {
    val decodedAnimation = ImageDecoder.decodeDrawable(
        ImageDecoder.createSource(resources, R.drawable.my_drawable))

    // Prior to start(), the first frame is displayed.
    (decodedAnimation as? AnimatedImageDrawable)?.start()
}

Java

private void decodeImage() throws IOException {
    Drawable decodedAnimation = ImageDecoder.decodeDrawable(
        ImageDecoder.createSource(getResources(), R.drawable.my_drawable));

    if (decodedAnimation instanceof AnimatedImageDrawable) {
        // Prior to start(), the first frame is displayed.
        ((AnimatedImageDrawable) decodedAnimation).start();
    }
}

O ImageDecoder tem vários métodos que permitem que você faça mais modificações na imagem. Por exemplo, é possível usar setPostProcessor() para modificar a aparência da imagem, como aplicar uma máscara circular ou cantos arredondados.

Vídeo VP9 HDR, compactação de imagens HEIF e Media APIs

O Android 9 oferece suporte integrado ao perfil 2 do VP9 de High Dynamic Range (HDR), para oferecer filmes compatíveis com HDR aos usuários do YouTube, Play Filmes, e outras fontes em dispositivos compatíveis com HDR.

O Android 9 também adiciona suporte à codificação de imagens usando o recurso de imagem de alta eficiência Formato do arquivo (HEIF ou HEIC), o que melhora a compactação e reduz o espaço de armazenamento e os dados de rede. uso. Exemplos de imagens estáticas HEIF são compatíveis com a MediaMuxer e MediaExtractor classes. Com suporte de plataforma em dispositivos Android 9, é fácil enviar e e usar imagens HEIF do seu servidor de back-end. Depois de confirmar que o app é compatível com esse formato de dados para compartilhamento e exibição, experimente o HEIF como um formato de armazenamento de imagens no app. É possível fazer uma conversão de jpeg para heic usando ImageDecoder ou BitmapFactory (que extrai um bitmap de um arquivo JPEG). Em seguida, você pode usar HeifWriter para escrever HEIF imagens estáticas de buffers de byte YUV, ou instâncias de Surface ou Bitmap.

As métricas de mídia também estão disponíveis nas classes AudioTrack, AudioRecord e MediaDrm.

O Android 9 apresenta métodos à classe MediaDRM para receber métricas, níveis de HDCP, níveis de segurança e número de sessões, além de adicionar mais controle sobre os níveis de segurança e as paradas de segurança. Consulte a diferença de API para saber detalhes.

No Android 9, a API AAudio adiciona suporte para vários atributos adicionais da AAudioStream, incluindo uso, conteúdo o tipo e a predefinição de entrada. Usando esses atributos, você pode criar streams ajustados para aplicativos de VoIP ou câmeras de vídeo. Também é possível definir o ID da sessão para associar um stream AAudio a uma submixagem que pode incluir efeitos. Use a API AudioEffect para controlar os efeitos.

O Android 9 apresenta a API AudioEffect para processamento dinâmico. Com essa classe, você pode criar efeitos de áudio baseados em canal, incluindo equalização, compressão multibanda e limitador, em vários estágios. O o número de faixas e de estágios ativos é configurável, e a maioria dos parâmetros pode ser controladas em tempo real.

Confidencialidade de custo de dados no JobScheduler

A partir do Android 9, JobScheduler pode usar sinais de status da rede fornecidos pelas operadoras para melhorar o tratamento de trabalhos relacionados à rede.

Os jobs podem declarar o tamanho estimado dos dados, a pré-busca de sinais e especificar requisitos detalhados de rede. O JobScheduler gerencia o trabalho de acordo com o status da rede. Por exemplo, quando a rede sinaliza que está congestionada, JobScheduler pode adiar solicitações de rede grandes. Quando em rede ilimitada, o JobScheduler pode executar jobs de pré-busca para melhorar a experiência do usuário, como a pré-busca de manchetes.

Ao adicionar jobs, use setEstimatedNetworkBytes(), setPrefetch(), e setRequiredNetwork() quando apropriado para ajudar JobScheduler lidam com o trabalho corretamente. Quando o job for executado, use o objeto Network retornado por JobParameters.getNetwork(). Caso contrário, você usará implicitamente a rede padrão do dispositivo, que pode não atender aos seus requisitos e causar um uso de dados indesejado.

API Neural Networks 1.1

A API Neural Networks foi lançada no Android 8.1 (API de nível 27) para acelerar o aprendizado de máquina Android O Android 9 amplia e aprimora a API, adicionando suporte a nove novas operações:

Problema conhecido: ao transmitir ANEURALNETWORKS_TENSOR_QUANT8_ASYMM de tensores ANEURALNETWORKS_PAD disponível no Android 9 e versões mais recentes, a saída da NNAPI pode não corresponder à saída de máquinas de nível mais alto de machine learning, como TensorFlow Lite. Passe apenas ANEURALNETWORKS_TENSOR_FLOAT32 até que o problema seja resolvido.

Além disso, a API também introduz uma nova função: ANeuralNetworksModel_relaxComputationFloat32toFloat16(), que permite especificar se você quer calcular ANEURALNETWORKS_TENSOR_FLOAT32 com intervalo e precisão tão baixos quanto os do ponto flutuante de 16 bits IEEE 754 .

Estrutura de preenchimento automático

O Android 9 apresenta várias melhorias que o preenchimento automático serviços podem implementar para melhorar ainda mais a experiência do usuário ao preencher formas. Para saber mais sobre como usar recursos de preenchimento automático no app, consulte o guia Estrutura de preenchimento automático.

Melhorias na segurança

O Android 9 apresenta vários recursos de segurança, que a as seções a seguir resumem:

Confirmação protegida pelo Android

Os dispositivos compatíveis que executam o Android 9 ou versões mais recentes oferecem a usar a Confirmação protegida pelo Android. Ao usar esse fluxo de trabalho, mostra uma solicitação ao usuário para que ele aprove uma breve declaração. Essa declaração permite ao app reafirmar que o usuário quer realizar uma uma transação sensível, como fazer um pagamento.

Se o usuário aceitar a declaração, o Android Keystore vai receber e armazenar uma assinatura criptográfica protegida por um código de autenticação de mensagens em hash com chave (HMAC). Depois que o Android Keystore confirmar a validade da mensagem, o app poderá usar a chave gerada por trustedConfirmationRequired no ambiente de execução confiável (TEE, na sigla em inglês) para assinar a mensagem aceita pelo usuário. O a assinatura indica, com confiança muito alta, que o usuário viu e tenha concordado com ela.

Atenção: a Confirmação protegida pelo Android não oferece um canal de informações seguro ao usuário. O app não pode assumir nenhuma garantia de confidencialidade além daquelas que a plataforma Android oferece. E, principalmente, não use esse fluxo de trabalho para exibir informações sensíveis que você normalmente não mostraria no dispositivo do usuário.

Para orientações sobre como adicionar compatibilidade com a Confirmação protegida pelo Android, consulte o Protegido pelo Android confirmação guia.

Caixa de diálogo de autenticação biométrica unificada

No Android 9, o sistema oferece caixas de diálogo de autenticação biométrica em nome da do seu app. Essa funcionalidade cria aparência, aparência e posicionamento padronizados para o diálogo, o que dá aos usuários mais confiança de que estão fazendo a autenticação. verificador de credenciais biométrica confiável.

Se o app usa FingerprintManager para mostrar uma caixa de diálogo de autenticação por impressão digital aos usuários, mude para BiometricPrompt. O BiometricPrompt depende do sistema para mostrar a autenticação caixa de diálogo. Ele também muda seu comportamento para se adaptar ao tipo de biometria autenticação que um usuário escolheu.

Módulo de segurança de hardware

Dispositivos compatíveis com o Android 9 ou versões mais recentes instaladas podem ter um StrongBox Keymaster, uma implementação da Keymaster HAL que ficam em um módulo de segurança de hardware. O módulo contém:

  • a própria CPU;
  • armazenamento seguro;
  • um gerador de números aleatórios real;
  • Mecanismos adicionais para resistir a violações do pacote e sideload não autorizado de aplicativos.

Ao verificar as chaves armazenadas no Keymaster StrongBox, o sistema corrobora uma a integridade da chave com o ambiente de execução confiável (TEE).

Para saber mais sobre o uso do Strongbox Keymaster, consulte Módulo de segurança de hardware.

Importação de chaves seguras para o Keystore

O Android 9 oferece maior segurança na descriptografia de chaves ao adicionar a capacidade de importar chaves criptografadas com segurança ao Keystore usando um formato de chave codificado por ASN.1. Em seguida, o Keymaster descriptografa as chaves no Keystore para que o conteúdo delas nunca apareça como texto simples na memória do host do dispositivo.

Saiba como importar mais chaves criptografadas com segurança.

Esquema de assinatura de APK com rotação de chaves

O Android 9 adiciona suporte ao APK Signature Scheme v3. Esse esquema tem a opção incluir um registro de prova de rotação no bloco de assinatura para cada assinatura certificado. Esse recurso permite que seu app seja assinado com uma nova assinatura vinculando os certificados de assinatura anteriores do arquivo APK àquele com o que agora está assinada.

Saiba mais sobre como fazer rodízio de chaves usando apksigner.

Opção para permitir a descriptografia de chaves apenas em dispositivos desbloqueados

O Android 9 introduz a flag unlockedDeviceRequired. Essa opção determina se o Keystore exige que a tela seja desbloqueada antes de permitir a descriptografia de dados em trânsito ou armazenados usando a chave especificada. Esses tipos de chaves são ideais para criptografar dados sensíveis para armazenamento em disco, como dados corporativos ou de saúde. O sinalizador oferece aos usuários uma maior garantia de que os dados não poderão ser descriptografados enquanto o dispositivo estiver bloqueado, em caso de perda ou roubo do smartphone.

Para proteger uma chave contra descriptografia enquanto o dispositivo estiver bloqueado, ative a flag transmitindo true para setUnlockedDeviceRequired() . Depois de concluir essa etapa, quando a tela do usuário estiver bloqueada, qualquer ao tentar descriptografar ou assinar dados usando essa chave. Um dispositivo bloqueado requer uma PIN, senha, impressão digital ou outro fator confiável antes de ser acessados.

Suporte à criptografia legada

Os dispositivos Android 9 que vêm com o Keymaster 4 oferecem suporte à biblioteca de dados triplo de criptografia de dados, ou Triple DES. Caso seu app interopere com as APIs legadas sistemas que exigem DES triplo, usam esse tipo de cifra ao criptografar credenciais confidenciais.

Para saber mais sobre como aumentar a segurança do seu app, consulte Segurança para desenvolvedores Android.

Descontinuação do WPS

O Wi-Fi Protected Setup (WPS) foi descontinuado por motivos de segurança.

Backups do Android

O Android 9 adiciona novas funcionalidades e opções do desenvolvedor relacionadas para backup e restauração. Os detalhes dessas mudanças estão nas seções a seguir.

Backups com criptografia do lado do cliente

O Android 9 adiciona suporte à criptografia de backups do Android com uma do secret do lado do cliente. Esse suporte é ativado automaticamente quando as seguintes condições são atendidas:

Quando essa medida de privacidade é ativada, é necessário informar o PIN, o padrão ou a senha do dispositivo para restaurar dados dos backups feitos pelo dispositivo do usuário. Para saber mais sobre a tecnologia por trás desse recurso, consulte o whitepaper do Serviço do Google Cloud Key Vault.

Definir as condições do dispositivo necessárias para backup

Caso os dados do app incluam informações ou preferências confidenciais, o Android 9 permite definir o dispositivo condições em que os dados do seu app são incluídos no backup do usuário, como quando são feitos no lado do cliente a criptografia esteja ativada ou uma transferência local entre dispositivos está ocorrendo.

Para saber mais sobre como fazer backup de dados em dispositivos Android, consulte Dados Visão geral do backup.

Acessibilidade

O Android 9 apresenta melhorias na acessibilidade estrutural que facilita a oferta de experiências ainda melhores aos usuários do seu app.

Semântica de navegação

Os atributos adicionados ao Android 9 facilitam a definição de como os serviços de acessibilidade, principalmente os leitores de tela, navegam de uma parte da tela para outra. Esses atributos podem ajudar usuários com deficiências visuais a percorrer rapidamente o texto da IU dos seus aplicativos e fazer uma seleção.

Por exemplo, em um aplicativo de compras, um leitor de tela pode ajudar os usuários a navegar diretamente de uma categoria de ofertas para a próxima, sem que o leitor de tela precise ler todos os itens de uma categoria antes de mudar para a próxima.

Títulos do painel de acessibilidade

No Android 8.1 (nível 27 da API) e versões anteriores, os serviços de acessibilidade nem sempre determinar quando um painel específico da tela foi atualizado, como quando uma atividade substitui um fragmento por outro. Os painéis consistem em elementos de interface agrupados logicamente e relacionados visualmente que normalmente compõem um fragmento.

No Android 9, você pode informar títulos de painel de acessibilidade, ou títulos identificáveis individualmente, para esses painéis. Se um painel tiver um título de painel de acessibilidade, os serviços de acessibilidade recebem informações mais detalhadas quando o painel é alterado. Esse recurso permite que os serviços forneçam informações mais detalhadas ao usuário sobre o que foi alterado na IU.

Para especificar o título de um painel, use o atributo android:accessibilityPaneTitle. Também é possível atualizar o título de um painel de IU substituído em tempo de execução usando setAccessibilityPaneTitle(). Por exemplo, você pode fornecer um título para a área de conteúdo de um Objeto Fragment.

Navegação baseada em cabeçalhos

Se seu aplicativo exibir conteúdo textual que inclui títulos lógicos, defina o android:accessibilityHeading a true para as instâncias de View que representam esses cabeçalhos. De adicionar esses cabeçalhos, permite que os serviços de acessibilidade ajudem os usuários a navegar diretamente de um cabeçalho para o próximo. Qualquer serviço de acessibilidade pode usar esse recurso para melhorar a experiência de navegação da interface do usuário.

Navegação de grupo e saída

Tradicionalmente, os leitores de tela usam o atributo android:focusable para determinar quando devem ler um ViewGroup ou uma coleção de objetos View como uma única unidade. Dessa forma, os usuários pudessem entender que as visualizações estavam logicamente relacionadas entre si.

No Android 8.1 e versões anteriores, é necessário marcar cada objeto View em um ViewGroup como não focável e o próprio ViewGroup como focável. Isso fazia com que algumas instâncias de View fossem marcadas como focáveis, dificultando a navegação com o teclado.

A partir do Android 9, você pode usar o atributo android:screenReaderFocusable em vez do atributo android:focusable em situações em que tornar um objeto View com foco apresenta consequências indesejáveis. Os leitores de tela colocam o foco em todos os elementos que definiram android:screenReaderFocusable ou android:focusable como true.

Ações de conveniência

O Android 9 adiciona suporte para realizar ações de conveniência em nome dos usuários:

Interação com dicas
Recursos adicionados no framework de acessibilidade dão acesso a dicas na interface de um app. Use getTooltipText() para ler o texto de uma dica e use ACTION_SHOW_TOOLTIP e ACTION_HIDE_TOOLTIP para instruir instâncias de View a mostrar ou ocultar as dicas.
Ações globais adicionadas
O Android 9 introduz o suporte a duas ações de dispositivo adicionais na classe AccessibilityService. Seu serviço pode ajudar os usuários a bloquear os dispositivos e capturar telas usando as ações GLOBAL_ACTION_LOCK_SCREEN e GLOBAL_ACTION_TAKE_SCREENSHOT, respectivamente.

Detalhes da mudança de janela

O Android 9 facilita rastrear as atualizações nas janelas quando um app redesenha várias janelas simultaneamente. Quando um TYPE_WINDOWS_CHANGED evento ocorrer, use o método getWindowChanges() para determinar como as janelas foram alteradas. Durante uma atualização de várias janelas, cada produz o próprio conjunto de eventos. O getSource() retorna a visualização raiz da janela associada a cada evento.

Se um app tiver definido títulos do painel de acessibilidade para os objetos View, o serviço poderá reconhecer quando a IU do app for atualizada. Quando um evento TYPE_WINDOW_STATE_CHANGED ocorrer, use os tipos retornados por getContentChangeTypes() para determinar como a janela foi alterada. Por exemplo, o framework pode detectar quando um painel tem um novo título ou desaparece.

Rotação

Para eliminar rotações acidentais, adicionamos um modo que fixa o orientação, mesmo se a posição do dispositivo mudar. Os usuários podem acionar a rotação manualmente, quando necessário, pressionando um botão na barra do sistema.

Na maioria dos casos, os impactos de compatibilidade nos aplicativos são mínimos. No entanto, se seus tem um comportamento de rotação personalizado ou usa uma orientação de tela incomum. você pode se deparar com problemas que teriam passado despercebidos antes, quando a preferência de rotação do usuário foi sempre definida como retrato. Recomendamos que você faça observe o comportamento de rotação em todas as atividades principais do aplicativo e faça se todas as configurações de orientação de tela ainda estão fornecendo o ter a melhor experiência possível.

Para mais detalhes, consulte a seção sobre comportamentos associados mudanças.

Dispositivo móvel giratório mostrando o novo modo de rotação, permitindo que os usuários acionem a rotação manualmente

Um novo modo de rotação permite que os usuários acionem a rotação manualmente quando necessário usando um botão na barra do sistema.

Texto

O Android 9 traz os seguintes recursos de texto para a plataforma:

  • Texto pré-computado: o A classe PrecomputedText melhora. o desempenho da renderização de texto, permitindo que você calcule e armazene em cache os informações com antecedência. Ele também permite que o app execute o layout de texto desativado na linha de execução principal.

  • Lupa: a classe Magnifier é uma que fornece uma API de lupa, permitindo uma conexão consistente com o recurso de lupa em todos os apps.

  • Linkify inteligente: o Android 9 aprimora a TextClassifier, que usa machine learning para identificar entidades em textos selecionados e sugerir ações. Por exemplo, TextClassifier pode permitir que o app detecte que o usuário selecionou um número de telefone. Seu app pode sugerir que o o usuário fizer uma chamada telefônica usando esse número. Os recursos em TextClassifier substituem a funcionalidade da classe Linkify.

  • Layout de texto: vários métodos e atributos convenientes facilitam a implementação do design da interface. Para mais detalhes, consulte a documentação de referência TextView

Conversão ART antecipada de arquivos DEX

Em dispositivos com o Android 9 ou versões mais recentes, o Android Runtime O compilador antecipadamente (ART) otimiza ainda mais o Dalvik Executable compactado. (DEX) convertendo os arquivos DEX de um pacote de app em um representação compacta. Essa mudança permite que seu app inicie mais rápido e consuma menos espaço em disco e RAM.

Essa melhoria beneficia especialmente dispositivos mais simples com E/S de disco mais lenta. velocidades

Rastreamento do sistema no dispositivo

O Android 9 permite registrar rastros do sistema no dispositivo e compartilhar um relatório dessas gravações com a equipe de desenvolvimento. Este relatório oferece suporte a vários formatos, incluindo HTML.

A coleta desses rastros permite capturar dados de tempo relacionados aos processos e às linhas de execução do app, bem como visualizar outros tipos de estados de dispositivo com relevância global.

Para saber mais sobre essa ferramenta, consulte Executar rastreamento de sistema no dispositivo.