O Android 10 (API de nível 29) introduz uma série de alterações de recursos e comportamentos para proteger melhor a privacidade dos usuários. Essas alterações aumentam a transparência e o controle que os usuários têm sobre os próprios dados e as funções que eles fornecem aos apps. Esses recursos podem fazer com que comportamentos ou dados específicos de que seu app depende se comportem de maneira diferente em comparação com versões mais antigas da plataforma. Os impactos no seu app devem ser mínimos se ele seguir as práticas recomendadas atuais para lidar com dados do usuário.
Esta página lista um resumo de cada alteração.
Principais mudanças
Esta seção inclui as principais alterações no Android 10 relacionadas à privacidade.
Acesso ao armazenamento externo com escopo definido para arquivos e mídia do app
Por padrão, os apps direcionados ao Android 10 e versões posteriores têm acesso com escopo definido ao armazenamento externo ou armazenamento com escopo. Esses apps podem ver os seguintes tipos de arquivo em um dispositivo de armazenamento externo sem precisar solicitar permissões de usuário relacionadas ao armazenamento:
- Arquivos no diretório específico do app, acessados usando
getExternalFilesDir()
. - Fotos, vídeos e clipes de áudio que o app criou no armazenamento de mídia.
Para saber mais sobre o armazenamento com escopo, além de como compartilhar, acessar e modificar arquivos salvos em dispositivos de armazenamento externo, consulte os guias sobre como gerenciar arquivos no armazenamento externo e acessar e modificar arquivos de mídia.
O acesso ao local do dispositivo em segundo plano requer permissão
Para oferecer compatibilidade com o maior controle que os usuários têm sobre o acesso de um app às informações de localização, o Android 10 introduz a permissão ACCESS_BACKGROUND_LOCATION
.
Diferentemente das permissões ACCESS_FINE_LOCATION
e ACCESS_COARSE_LOCATION
, a permissão ACCESS_BACKGROUND_LOCATION
afeta apenas o acesso de um app ao local quando executado em segundo plano. A menos que uma das seguintes condições seja atendida, considera-se que o app está acessando o local em segundo plano:
- Uma atividade pertencente ao app está visível.
O app está executando um serviço em primeiro plano que declarou um tipo de serviço em primeiro plano de
location
.Para declarar o tipo de serviço em primeiro plano para um serviço no seu app, defina a
targetSdkVersion
oucompileSdkVersion
do app como29
ou superior. Saiba mais sobre como os serviços em primeiro plano podem continuar ações iniciadas pelo usuário que exigem acesso ao local.
Acesso concedido automaticamente ao direcionar para o Android 9 ou versões anteriores
Se seu app for executado no Android 10 ou versões posteriores, mas for direcionado ao Android 9 (API de nível 28) ou versões anteriores, o comportamento a seguir será aplicado:
- Se seu app declarar um elemento
<uses-permission>
paraACCESS_FINE_LOCATION
ouACCESS_COARSE_LOCATION
, o sistema adicionará automaticamente um elemento<uses-permission>
paraACCESS_BACKGROUND_LOCATION
durante a instalação. - Se seu app solicitar
ACCESS_FINE_LOCATION
ouACCESS_COARSE_LOCATION
, o sistema adicionaráACCESS_BACKGROUND_LOCATION
automaticamente à solicitação.
Acesso quando o dispositivo faz upgrade para o Android 10
Se um usuário conceder ao seu app acesso ao local do dispositivo (ACCESS_COARSE_LOCATION
ou ACCESS_FINE_LOCATION
) e fizer upgrade do dispositivo do Android 9 para o Android 10, o sistema atualizará automaticamente o conjunto de permissões baseadas em localização concedidas ao app. O conjunto de permissões que seu app recebe após o upgrade depende da versão do SDK de destino e das permissões definidas, conforme mostrado na tabela a seguir:
Tabela 1. Alterações no estado de permissão de localização depois do upgrade do dispositivo para o Android 10.
Versão da plataforma de destino | Permissão aproximada ou precisa concedida? |
Permissão de segundo plano definida no manifesto? |
Estado de permissão padrão atualizado |
---|---|---|---|
Android 10 | Sim | Sim | Acesso em primeiro e segundo plano |
Android 10 | Sim | Não | Apenas acesso em primeiro plano |
Android 10 | Não | (Ignorado pelo sistema) | Sem acesso |
Android 9 ou anterior | Sim | Adicionado automaticamente pelo sistema no momento do upgrade do dispositivo | Acesso em primeiro e segundo plano |
Android 9 ou anterior | Não | (Ignorado pelo sistema) | Sem acesso |
Para mais informações sobre como recuperar a localização do dispositivo enquanto o app está em segundo plano, consulte o guia sobre como receber atualizações periódicas da localização.
Restrições para o início de atividades em segundo plano
A partir do Android 10, o sistema impõe restrições ao início das atividades em segundo plano. Essa mudança de comportamento ajuda a minimizar as interrupções para o usuário e dá a ele mais controle sobre o que é exibido na tela. Desde que seu app inicie atividades como resultado direto da interação do usuário, é provável que ele não seja afetado por essas restrições.
Para saber mais sobre a alternativa recomendada para iniciar atividades em segundo plano, consulte o guia sobre como alertar os usuários sobre eventos que dependem de horários no seu app.
Identificadores e dados
Esta seção lista as alterações específicas ao trabalho com identificadores e dados do dispositivo.
Remoção da afinidade de contatos
A partir do Android 10, a plataforma não monitora as informações de afinidade dos contatos. Como resultado, se seu app realizar uma pesquisa nos contatos do usuário, os resultados não serão ordenados por frequência de interação.
O guia sobre o ContactsProvider
contém uma notificação descrevendo os campos e métodos específicos que estão obsoletos em todos os dispositivos a partir do Android 10.
Randomização de endereço MAC
Em dispositivos que executam o Android 10 ou versões posteriores, o sistema transmite endereços MAC aleatórios por padrão.
Se seu app manipular um caso de uso corporativo, a plataforma fornecerá APIs para várias operações relacionadas aos endereços MAC:
- Conseguir um endereço MAC aleatório: os apps do proprietário do perfil e do proprietário podem recuperar o endereço MAC aleatório atribuído a uma rede específica chamando
getRandomizedMacAddress()
. - Conseguir o endereço MAC real de fábrica: os apps do proprietário do dispositivo podem recuperar o endereço MAC real do hardware de um dispositivo chamando
getWifiMacAddress()
. Esse método é útil para rastrear grupos de dispositivos.
Restrição do acesso ao sistema de arquivos /proc/net
Em dispositivos que executam o Android 10 ou versões posteriores, os apps não podem acessar /proc/net
, o que inclui informações sobre o estado da rede de um dispositivo. Os apps que precisam de acesso a essas informações, como as VPNs, têm que usar as classes NetworkStatsManager
e ConnectivityManager
.
Restrição de identificadores de dispositivo não reconfiguráveis
A partir do Android 10, os apps precisam ter a permissão privilegiada READ_PRIVILEGED_PHONE_STATE
para acessar os identificadores não reconfiguráveis do dispositivo, que incluem o IMEI e o número de série.
Os métodos afetados incluem:
Build
TelephonyManager
Se seu app não tiver permissão e ainda assim você tentar solicitar informações sobre os identificadores não reconfiguráveis, a resposta da plataforma mudará de acordo com a versão do SDK à qual ele está destinado:
- Se o app for destinado ao Android 10 ou versões posteriores, ocorrerá uma
SecurityException
. - Se o app for destinado ao Android 9 (API de nível 28) ou versões anteriores, o método retornará
null
ou dados de marcadores caso o app tenha a permissãoREAD_PHONE_STATE
. Caso contrário, ocorrerá umaSecurityException
.
Muitos casos de uso não precisam de identificadores de dispositivo não reconfiguráveis. Por exemplo, se seu app usa identificadores de dispositivo não reconfiguráveis para fins de rastreamento de anúncios ou de análise de usuários, use um código de publicidade do Android para esses casos de uso específicos. Para saber mais, consulte as práticas recomendadas para identificadores específicos.
Acesso limitado aos dados da área de transferência
A menos que seu app seja o Editor de método de entrada (IME, na sigla em inglês) padrão ou que ele seja o app em foco no momento, ele não poderá acessar dados da área de transferência no Android 10 ou versões posteriores.
Proteção do número de série do dispositivo USB
Se seu app for destinado ao Android 10 ou versões posteriores, ele só poderá ler o número de série depois de receber autorização do usuário para ter acesso ao dispositivo ou acessório USB.
Para saber mais sobre como trabalhar com dispositivos USB, consulte o guia sobre como configurar hosts USB.
Câmera e conectividade
Esta seção lista as alterações específicas aos metadados da câmera e às APIs de conectividade.
Restrição do acesso aos detalhes e metadados da câmera
O Android 10 altera a amplitude das informações que o método getCameraCharacteristics()
retorna por padrão. Especificamente, o app precisa ter permissão da CAMERA
para acessar metadados possivelmente específicos do dispositivo que estão incluídos no valor de retorno desse método.
Para saber mais sobre essas alterações, consulte a seção sobre os campos da câmera que requerem permissão.
Restrição para ativar e desativar o Wi-Fi
Os apps direcionados ao Android 10 ou versões posteriores não podem ativar ou desativar o Wi-Fi. O método WifiManager.setWifiEnabled()
sempre retorna false
.
Se você precisar solicitar aos usuários para ativar e desativar o Wi-Fi, use um painel de configurações.
Restrições ao acesso direto a redes Wi-Fi configuradas
Para proteger a privacidade do usuário, a configuração manual da lista de redes Wi-Fi está restrita aos apps do sistema e a controladores de política de dispositivo (DPCs, na sigla em inglês). Um determinado DPC pode ser o proprietário do dispositivo ou do perfil.
Se o app for destinado ao Android 10 ou versões posteriores e não for um app do sistema ou um DPC, os métodos a seguir não retornarão dados úteis:
O método
getConfiguredNetworks()
sempre retorna uma lista vazia.Todo método de operação de rede que retorna um valor inteiro (
addNetwork()
eupdateNetwork()
) sempre retorna -1.Toda operação de rede que retorna um valor booleano (
removeNetwork()
,reassociate()
,enableNetwork()
,disableNetwork()
,reconnect()
edisconnect()
) sempre retornafalse
.
Se seu app precisa se conectar a redes Wi-Fi, use os seguintes métodos alternativos:
- Para acionar uma conexão local instantânea com uma rede Wi-Fi, use
WifiNetworkSpecifier
em um objetoNetworkRequest
padrão. - Para adicionar redes Wi-Fi que possam ser consideradas para fornecer ao usuário acesso à Internet, trabalhe com objetos
WifiNetworkSuggestion
. Você pode adicionar e remover redes que aparecem na caixa de diálogo para seleção de rede com conexão automática chamandoaddNetworkSuggestions()
eremoveNetworkSuggestions()
, respectivamente. Esses métodos não exigem nenhuma permissão de localização.
Algumas APIs de telefonia, Bluetooth e Wi-Fi requerem permissão de localização PRECISA
Se seu app for direcionado ao Android 10 ou versões posteriores, ele precisará ter a permissão ACCESS_FINE_LOCATION
para usar diversos métodos nas APIs de Wi-Fi, Wi-Fi Aware ou Bluetooth. As seções a seguir listam as classes e métodos afetados.
Telefonia
TelephonyManager
getCellLocation()
getAllCellInfo()
requestNetworkScan()
requestCellInfoUpdate()
getAvailableNetworks()
getServiceState()
TelephonyScanManager
requestNetworkScan()
TelephonyScanManager.NetworkScanCallback
onResults()
PhoneStateListener
onCellLocationChanged()
onCellInfoChanged()
onServiceStateChanged()
Wi-Fi
WifiManager
startScan()
getScanResults()
getConnectionInfo()
getConfiguredNetworks()
WifiAwareManager
WifiP2pManager
WifiRttManager
Bluetooth
BluetoothAdapter
startDiscovery()
startLeScan()
BluetoothAdapter.LeScanCallback
BluetoothLeScanner
startScan()
Permissões
Esta seção descreve as atualizações no modelo de permissões do Android.
Acesso restrito ao conteúdo da tela
Para proteger o conteúdo da tela dos usuários, o Android 10 impede o acesso silencioso ao conteúdo da tela do dispositivo alterando o escopo das permissões READ_FRAME_BUFFER
, CAPTURE_VIDEO_OUTPUT
e CAPTURE_SECURE_VIDEO_OUTPUT
. A partir do Android 10, essas permissões são apenas para acesso por assinatura.
Os apps que requerem acesso ao conteúdo da tela do dispositivo precisam usar a API MediaProjection
, que exibe um aviso solicitando o consentimento do usuário.
Verificação de permissão voltada ao usuário em apps legados
Se seu app for destinado ao Android 5.1 (API de nível 22) ou anterior, os usuários verão uma tela de permissões ao usar o app em um dispositivo que executa o Android 10 ou versões posteriores pela primeira vez, como mostra a Figura 1. Essa tela oferece aos usuários a oportunidade de revogar o acesso a permissões que o sistema concedeu ao seu app no momento da instalação.
Reconhecimento de atividade física
O Android 10 introduz a permissão de ambiente de execução ACTIVITY_RECOGNITION
para apps que precisam detectar a contagem de passos do usuário ou classificar as atividades físicas dele, como caminhadas, passeios de bicicleta ou em um veículo. Isso foi projetado para permitir que os usuários vejam nas configurações. como os dados do sensor do dispositivo são usados
Algumas bibliotecas do Google Play Services, como a API Activity Recognition e a API Google Fit, não fornecem resultados, a menos que o usuário conceda ao seu app essa permissão.
Os únicos sensores integrados no dispositivo que exigem que você declare essa permissão são os sensores do contador de passos e do detector de passos.
Se seu app é direcionado ao Android 9 (API de nível 28) ou versões anteriores e especifica a permissão com.google.android.gms.permission.ACTIVITY_RECOGNITION
no arquivo de manifesto, o sistema concede automaticamente essa permissão, conforme necessário.
Quando você atualiza seu app para destiná-lo ao Android 10, a plataforma mantém a permissão. No entanto, o usuário pode revogar essa permissão a qualquer momento nas configurações do sistema.
Grupos de permissões removidos da IU
A partir do Android 10, os apps não podem pesquisar como as permissões são agrupadas na IU.