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 as áreas em que as mudanças na plataforma podem afetar seus apps.
Posicionamento em ambiente fechado com Wi-Fi RTT
![As novas APIs de RTT oferecem suporte ao posicionamento interno nos seus apps.](https://developer.android.google.cn/static/images/about/versions/pie/rtt-nav.png?authuser=19&hl=pt)
O Android 9 adiciona suporte de plataforma para o Wi-Fi IEEE 802.11-2016 também conhecido como Wi-Fi Round-Trip-Time (RTT) para aproveitar do posicionamento interno nos seus aplicativos.
Em dispositivos com Android 9 com suporte a hardware, os aplicativos podem usar a
APIs RTT para medir a
distância até os pontos de acesso (APs) Wi-Fi compatíveis com RTT por perto. O dispositivo deve ter
serviços de localização ativados e a busca por Wi-Fi ativada (em
Configurações > Localização), e o app precisa ter o
ACCESS_FINE_LOCATION
permissão. O dispositivo não precisa se conectar aos pontos de acesso para usar a 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 essa precisão, é possível criar novas experiências, como a navegação dentro de edifícios e serviços baseados na localização refinados, como controle de voz sem ambiguidade (por exemplo, "Acenda esta luz") e informações baseadas na localização, como "Há ofertas especiais para este produto?").
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 da tela
![Tela de opções do desenvolvedor mostrando diferentes tamanhos de corte](https://developer.android.google.cn/static/images/about/versions/pie/emulator-devoptions-cutout_2x.png?authuser=19&hl=pt)
Como testar o corte da tela usando um 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
DisplayCutout
você descobre a localização e a forma das áreas não funcionais onde
conteúdo não deve ser exibido. 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:
LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT
LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES
LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER
É possível simular um corte de tela em qualquer dispositivo ou emulador com o Android 9. da seguinte forma:
- Ative as opções do desenvolvedor.
- Na tela Opções do desenvolvedor, role para baixo até a seção Desenho e selecione Simular uma tela com corte.
- Selecione o tamanho do corte.
Notificações
O Android 9 apresenta diversas melhorias nas notificações, e todas elas são disponível para desenvolvedores que segmentam o nível 28 da API e versões mais recentes.
![Notificações de mensagens](https://developer.android.google.cn/static/images/about/versions/pie/p-messaging.jpg?authuser=19&hl=pt)
MessagingStyle com foto anexada.
![Notificação de mensagem](https://developer.android.google.cn/static/images/about/versions/pie/p-replies.jpg?authuser=19&hl=pt)
MessagingStyle com respostas e conversa.
Para ver exemplos de códigos que usam notificações, incluindo os recursos do Android 9, consulte a Pessoas Exemplo.
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. Aprimoramentos do Android 9 esse recurso com as seguintes melhorias:
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, comoaddMessage()
, Agora, usamos a classePerson
em vez de umCharSequence
. A classePerson
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 para criar umaPerson
e uma mensagem com 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: seu app pode recuperar as
EXTRA_REMOTE_INPUT_DRAFT
enviadas 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 é em grupo: você pode usar
setGroupConversation()
para identificar intencionalmente uma conversa como um grupo ou não em grupo.Definir a ação semântica de uma intent: a
setSemanticAction()
permite que você dê um significado semântico a uma ação, como como "marcar como lida", "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 de 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
isBlocked()
para identificar quando um grupo está bloqueado e, consequentemente, não enviar nenhuma mensagem notificações para 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 informações sobre como reagir a intents de transmissão, consulte Transmissões.NotificationManager.Policy
tem três novas categorias de prioridade "Não perturbe":PRIORITY_CATEGORY_ALARMS
prioriza os alarmes.PRIORITY_CATEGORY_MEDIA
prioriza sons de fontes de mídia, como mídia e navegação por voz.PRIORITY_CATEGORY_SYSTEM
prioriza os sons do sistema.
O
NotificationManager.Policy
também tem sete novas constantes "Não perturbe" que você pode usar para suprimir a interrupção visual:SUPPRESSED_EFFECT_FULL_SCREEN_INTENT
impede que a notificação inicie uma atividade de tela cheia.SUPPRESSED_EFFECT_LIGHTS
bloqueia as luzes de notificação.SUPPRESSED_EFFECT_PEEK
impede que as notificações deslizem brevemente para a visualização ("exibição parcial").SUPPRESSED_EFFECT_STATUS_BAR
impede que notificações apareçam na barra de status em dispositivos compatíveis com esse recurso.SUPPRESSED_EFFECT_BADGE
bloqueia selos nos dispositivos compatíveis com esse recurso. Para mais informações, consulte Modificar um ícone de notificação.SUPPRESSED_EFFECT_AMBIENT
bloqueia notificações em dispositivos compatíveis com telas ambiente.SUPPRESSED_EFFECT_NOTIFICATION_LIST
impede que as notificações apareçam na visualização em lista nos dispositivos compatíveis com esse recurso, como a aba de notificações ou a tela de bloqueio.
Compatibilidade com várias câmeras e atualizações de câmera
Em dispositivos com o Android 9, você pode acessar streams simultaneamente de duas ou mais unidades câmeras. 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 uma função stream da câmera que alterna automaticamente entre duas ou mais câmeras.
Outras melhorias na câmera incluem recursos adicionais de sessão parâmetros que ajudam a reduzir atrasos durante a captura inicial, e o compartilhamento de superfície que permite os clientes da câmera lidam com vários casos de uso sem precisar parar e iniciar streaming da câmera. Também adicionamos APIs para flash baseado em tela suporte e acesso ao OIS marcações de tempo para estabilização de imagem e efeitos especiais no nível do 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 USB/UVC externo câmeras compatíveis.
ImageDecoder para drawables e bitmaps
O Android 9 apresenta a
ImageDecoder
, que oferece uma abordagem modernizada 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()
ao transmitir o ImageDecoder.Source
objeto para criar um Drawable
ou Bitmap
. Para alterar o
padrão, transmita OnHeaderDecodedListener
para
decodeDrawable()
ou decodeBitmap()
. ImageDecoder
de ligações
onHeaderDecoded()
com a largura e a altura padrão da imagem quando esses valores forem conhecidos.
Se a imagem codificada for um GIF ou WebP animado, decodeDrawable()
retornará uma
Drawable
, que é uma instância do
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 parasetTargetSampleSize()
- Para cortar uma imagem dentro do intervalo da imagem dimensionada, chame
setCrop()
- Para criar um bitmap mutável, transmita
true
parasetMutableRequired()
.
O ImageDecoder
também permite adicionar efeitos personalizados e complicados a uma imagem
como cantos arredondados ou
máscaras circulares. Usar
setPostProcessor()
com uma instância do
PostProcessor
para executar os comandos de desenho desejados.
Animação
O Android 9 apresenta a
AnimatedImageDrawable
para desenhar e exibir imagens animadas GIF e WebP.
AnimatedImageDrawable
funciona de forma semelhante a
AnimatedVectorDrawable
em que a linha de execução de renderização orienta as animações de AnimatedImageDrawable
.
A linha de execução de renderização também usa uma linha de execução de worker para decodificar, de modo que a decodificação não
interferir em outras operações na linha de execução 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 fazer ainda mais mudanças 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 APIs de mídia
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 ter certeza de que seu
é compatível com esse formato de dados para compartilhamento e exibição, teste o HEIF
como um formato de armazenamento de imagens no app. Você pode fazer uma conversão de jpeg para heic
usando ImageDecoder
ou
BitmapFactory
(que obtém
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 no
AudioTrack
,
AudioRecord
,
e MediaDrm
.
O Android 9 introduz métodos para a
Classe MediaDRM
para obter métricas, HDCP
níveis de acesso, 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 proteção. 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. Com esses atributos, é possível criar streams
ajustado para aplicativos VoIP ou câmeras de vídeo. Você também pode definir o ID da sessão como
associar um stream da AAudio a um submix que possa incluir efeitos; Use o
a API AudioEffect
para controlar
efeitos
O Android 9 apresenta a
API AudioEffect
para
processamento dinâmico.
Com ela, você pode criar efeitos de áudio baseados em canal, como
equalização, compressão de várias bandas e limitador em vários estágios. A
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 seu trabalho 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, causando um uso não intencional de dados.
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 expande e melhora a API, adicionando e suporte a nove novas operações:
- Operações matemáticas com elementos:
- Operações de matriz:
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. Você
devem transmitir 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 os recursos de preenchimento automático no seu app, consulte a 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 receberá e armazenará uma
assinatura criptográfica protegida por uma autenticação de mensagens de hash com chave
HMAC. Depois que o Android Keystore confirma a validade da mensagem, o app
pode usar a chave gerada a partir de trustedConfirmationRequired
no
ambiente de execução (TEE) para assinar a mensagem aceita pelo usuário. A
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. Seu app não pode assumir de confidencialidade além das 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.
Caso seu app use
FingerprintManager
para exibir uma caixa de diálogo de autenticação por impressão digital aos usuários, passe a usar
BiometricPrompt
como alternativa. 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 como usar o Strongbox Keymaster, consulte Segurança de hardware Module.
Importação de chaves seguras para o Keystore
O Android 9 oferece segurança extra na descriptografia de chaves ao adicionar a capacidade de importar chaves criptografadas com segurança para o Keystore usando uma Formato de chave codificado por ASN.1. Em seguida, o Keymaster descriptografa as chaves na Keystore para que o conteúdo das chaves 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 a rotação 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. A sinalização oferece aos usuários uma garantia maior de que o
os dados não podem ser descriptografados enquanto o dispositivo está bloqueado, caso o smartphone seja perdido
ou roubados.
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 Android Desenvolvedores.
Descontinuação do WPS
O uso do 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. Confira os detalhes sobre essas mudanças em outras seções.
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 os seguintes se as condições forem atendidas:
- O usuário ativou backup usando o Android 9 ou superior.
- O usuário definiu uma tela um bloqueio de tela para o dispositivo. que exige PIN, padrão ou senha para o desbloqueio.
Quando essa medida de privacidade está ativada, o PIN, o padrão ou a senha do dispositivo são necessárias para restaurar dados dos backups feitos pelo dispositivo do usuário. Para saber para saber mais sobre a tecnologia por trás desse recurso, acesse Google Cloud Key Vault Serviço.
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 no Android 9 facilitam a definição de como e serviços de acessibilidade, especialmente leitores de tela, navegam de uma parte de uma tela para outra. Esses atributos ajudam usuários com deficiência visual se mover rapidamente pelo texto na interface do usuário do aplicativo e permitir que ele faça uma seleção.
Por exemplo, em um app de compras, um leitor de tela pode ajudar os usuários a navegar diretamente de uma categoria de ofertas para a próxima, sem o leitor de tela a necessidade de ler todos os itens de uma categoria antes de passar 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 IU agrupados logicamente e relacionados visualmente que normalmente compreendem uma de dados.
No Android 9, você pode fornecer títulos de painéis de acessibilidade ou individualmente títulos identificáveis, 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 granulares ao usuário sobre o que mudou na interface.
Para especificar o título de um painel, use o método
android:accessibilityPaneTitle
. Você também pode atualizar o título de um painel de IU que é substituído em
ambiente 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
de melhorar a experiência dos usuários Experiência de navegação na interface.
Navegação de grupo e saída
Os leitores de tela costumavam usar
android:focusable
para
determinar quando eles devem ler
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 uma
ViewGroup
como não focalizável e o próprio ViewGroup
como focalizável. Isso
a organização fez com que algumas instâncias de View
fossem marcadas como focalizáveis de uma forma que
tornava a navegação pelo teclado mais complicada.
A partir do Android 9, você pode usar o
android:screenReaderFocusable
no lugar do atributo android:focusable
em situações em que
transformar um objeto View
em foco tem consequências indesejáveis. Leitores de tela
colocar o foco em todos os elementos que definiram android:screenReaderFocusable
.
ou de android:focusable
para 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. Usar
getTooltipText()
para ler o texto de uma dica e usar oACTION_SHOW_TOOLTIP
eACTION_HIDE_TOOLTIP
para instruir instâncias deView
a mostrar ou ocultar as dicas. - Ações globais adicionadas
- O Android 9 introduz o suporte a duas ações adicionais do dispositivo no
AccessibilityService
. Seu serviço pode ajudar os usuários a bloquear os dispositivos e fazer capturas de tela usando oGLOBAL_ACTION_LOCK_SCREEN
eGLOBAL_ACTION_TAKE_SCREENSHOT
respectivamente.
Detalhes de mudanças de janelas
O Android 9 facilita o rastreamento das atualizações nas janelas de um app quando ele
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 o
View
, o serviço poderá reconhecer
quando a interface do app é atualizada. Quando um
TYPE_WINDOW_STATE_CHANGED
evento ocorrer, use os tipos retornados pelo
getContentChangeTypes()
para determinar como a janela foi alterada. Por exemplo, o framework pode
detectar quando um painel tem um novo título ou quando ele 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](https://developer.android.google.cn/static/images/about/versions/pie/rotate-changes.gif?authuser=19&hl=pt)
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
melhorou o desempenho de 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 da plataforma que fornece uma API de lupa, permitindo uma conexão 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 seu 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 doTextClassifier
substituir a funcionalidade da classeLinkify
.Layout de texto: vários métodos e atributos convenientes facilitam implementar seu design de IU. 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 gravar rastros do sistema no dispositivo, Depois, compartilhe um relatório dessas gravações com sua equipe de desenvolvimento. Este relatório oferece suporte a vários formatos, incluindo HTML.
Ao coletar esses rastros, é possível capturar dados de tempo relacionados à e linhas de execução e ver outros tipos de dispositivos de importância global estados.
Para saber mais sobre essa ferramenta, consulte Executar o sistema no dispositivo e rastreamento de qualidade.