O Android 10 (nível 29 da API) introduz várias mudanças de recursos e comportamentos para proteger melhor a privacidade dos usuários. Essas mudanças aumentam a transparência e o controle que os usuários têm sobre os próprios dados e os recursos que eles oferecem aos apps. Esses recursos podem significar que comportamentos ou dados específicos de que seu app depende podem se comportar de maneira diferente em comparação com versões mais antigas da plataforma. Os impactos no app precisam ser mínimos se ele seguir as práticas recomendadas atuais para processar dados do usuário.
Esta página lista um resumo de cada alteração.
Principais mudanças
Esta seção inclui as principais mudanças 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 mais recentes recebem acesso com escopo ao armazenamento externo ou armazenamento com escopo. Esses apps podem ver os seguintes tipos de arquivos em um dispositivo de armazenamento externo sem precisar solicitar permissões do 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 na loja 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 suporte ao controle adicional que os usuários têm sobre o acesso de um app às
informações de local, o Android 10 introduz a
permissão
ACCESS_BACKGROUND_LOCATION
.
Ao contrário das permissões
ACCESS_FINE_LOCATION
e
ACCESS_COARSE_LOCATION
, a permissão ACCESS_BACKGROUND_LOCATION
afeta apenas o acesso de um app
à localização quando executado em segundo plano. Considera-se que o app acessa a localização em segundo plano, a menos que uma das condições abaixo seja
satisfeita:
- 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 app, defina o
targetSdkVersion
oucompileSdkVersion
como29
ou mais recente. Saiba mais sobre como os serviços em primeiro plano podem continuar ações iniciadas pelo usuário que exigem acesso à localização.
Se o app cria e monitora fronteiras geográficas virtuais e
é direcionado ao Android 10 (nível 29 da API) ou versões mais recentes, é necessário declarar a
permissão ACCESS_BACKGROUND_LOCATION
.
Acesso concedido automaticamente ao direcionar para o Android 9 ou versões anteriores
Se o app for executado no Android 10 ou versões mais recentes, mas for destinado ao Android 9 (nível 28 da API) ou versões anteriores, a plataforma aplicará o seguinte comportamento:
- Se o app declarar um elemento
<uses-permission>
paraACCESS_FINE_LOCATION
ouACCESS_COARSE_LOCATION
, o sistema vai adicionar automaticamente um elemento<uses-permission>
paraACCESS_BACKGROUND_LOCATION
durante a instalação. - Se o app solicitar
ACCESS_FINE_LOCATION
ouACCESS_COARSE_LOCATION
, o sistema adicionará automaticamenteACCESS_BACKGROUND_LOCATION
à solicitação.
Acesso quando o dispositivo faz upgrade para o Android 10
Se um usuário conceder ao seu app acesso à localização do dispositivo,
ACCESS_COARSE_LOCATION
ou
ACCESS_FINE_LOCATION
,
e depois fizer upgrade do dispositivo do Android 9 para o Android 10,
o sistema vai 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:
Versão da plataforma de destino | Permissão aproximada concedida ou fina? |
Permissão em 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 |
O usuário pode mudar esse nível de acesso mesmo depois que o sistema atualiza automaticamente o acesso do app à localização do dispositivo. Por exemplo, o usuário pode reduzir o acesso do app apenas ao primeiro plano ou revogá-lo totalmente. Antes de tentar acessar a localização do dispositivo, principalmente em um serviço em primeiro plano, seu app precisa conferir se o usuário ainda permite que o app receba essas informações de localização.
Acesso revogado ao atualizar o nível desejado da API em dispositivos Android 10
Considere o caso em que seu app já está instalado em um dispositivo com o
Android 10. Se você atualizar seu app para direcioná-lo
ao Android 10 nessa situação, o dispositivo revogará a
permissão ACCESS_BACKGROUND_LOCATION
.
Para saber mais 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 de 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 de atividades em segundo plano. Essa mudança de comportamento ajuda a minimizar interrupções para o usuário e o mantém mais no controle do que é mostrado na tela. Desde que o 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 urgentes no 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 rastreia as informações de afinidade de contatos. Como resultado, se o app realizar uma pesquisa nos contatos do usuário, os resultados não serão ordenados pela frequência de interação.
O guia sobre ContactsProvider
contém um aviso que descreve 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 com o Android 10 ou versões mais recentes, o sistema transmite endereços MAC aleatórios por padrão.
Se o app processar um caso de uso empresarial, a plataforma fornecerá APIs para várias operações relacionadas a endereços MAC:
- Conseguir um endereço MAC aleatório:os apps do proprietário do perfil e do proprietário do dispositivo
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 extrair 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 com o Android 10 ou versões mais recentes, os apps não podem acessar a
/proc/net
, o que inclui informações sobre o estado da rede de um dispositivo. Apps
que precisam de acesso a essas informações, como VPNs, precisam usar a classe
NetworkStatsManager
ou
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 o app não tiver a permissão e você ainda tentar solicitar informações sobre identificadores não reconfiguráveis, a resposta da plataforma vai variar de acordo com a versão do SDK de destino:
- Se o app for direcionado ao Android 10 ou versões mais recentes, ocorrerá uma
SecurityException
. - Se o app for direcionado ao Android 9 (nível 28 da API) ou versões anteriores, o método retornará
null
ou dados de marcador de posição se o app tiver a permissãoREAD_PHONE_STATE
. Caso contrário, vai ocorrer umaSecurityException
.
Muitos casos de uso não precisam de identificadores de dispositivo não reconfiguráveis. Por exemplo, se o app usa identificadores de dispositivo não reconfiguráveis para fins de rastreamento de anúncios ou análise de usuários, use um ID de publicidade do Android para esses casos de uso específicos. Para saber mais, consulte as práticas recomendadas para identificadores exclusivos.
Acesso limitado aos dados da área de transferência
A menos que seu app seja o Editor de método de entrada (IME) padrão ou que seja o app em foco no momento, ele não poderá acessar dados da área de transferência no Android 10 ou versões mais recentes.
Proteção do número de série do dispositivo USB
Se o app for direcionado ao Android 10 ou versões mais recentes, ele não poderá ler o número de série até que o usuário conceda permissão ao app para acessar o 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 muda a amplitude das informações que o método getCameraCharacteristics()
retorna por padrão. Especificamente, seu app precisa ter a permissão
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 mudanças, consulte a seção sobre os campos da câmera que exigem permissão.
Restrição para ativar e desativar o Wi-Fi
Os apps destinados ao Android 10 ou versões mais recentes 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 é restrita a apps do sistema e controladores de política de dispositivo (DPCs). Um determinado DPC pode ser o proprietário do dispositivo ou do perfil.
Se o app for direcionado ao Android 10 ou versões mais recentes 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.Cada método de operação de rede que retorna um valor inteiro (
addNetwork()
eupdateNetwork()
) sempre retorna -1.Cada operação de rede que retorna um valor booleano (
removeNetwork()
,reassociate()
,enableNetwork()
,disableNetwork()
,reconnect()
edisconnect()
) sempre retornafalse
.
Caso seu app precise se conectar a redes Wi-Fi, use estes 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 acesso à Internet ao
usuário, trabalhe com
objetos
WifiNetworkSuggestion
. É possível adicionar e remover redes que aparecem na caixa de diálogo de 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 EXATA
Se o app for direcionado ao Android 10 ou versões mais recentes, ele precisará ter a permissão
ACCESS_FINE_LOCATION
para usar vários métodos nas APIs de Wi-Fi, Wi-Fi Aware
ou Bluetooth. As seções abaixo listam as classes e os 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 precisam acessar o conteúdo da tela do dispositivo precisam usar a API
MediaProjection
, que exibe uma solicitação pedindo o consentimento do usuário.
Verificação de permissão voltada ao usuário em apps legados
Se o app for direcionado ao Android 5.1 (nível 22 da API) ou versões anteriores, os usuários verão uma tela de permissões ao usar o app em um dispositivo com o Android 10 ou mais recente pela primeira vez, conforme mostrado na Figura 1. Essa tela oferece aos usuários a oportunidade de revogar o acesso a permissões que o sistema concedeu ao app no momento da instalação.
Reconhecimento de atividade física
O Android 10 introduz a permissão de execução
android.permission.ACTIVITY_RECOGNITION
para apps que precisam detectar a contagem de passos do usuário ou
classificar a atividade física dele, como caminhar, pedalar ou se mover em um
veículo. Isso foi projetado para permitir que os usuários vejam como os dados do sensor do dispositivo são
usados nas Configurações.
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 tenha concedido essa permissão ao app.
Os únicos sensores integrados no dispositivo que exigem que você declare essa permissão são os sensores de contador de passos e detector de passos.
Se o app for direcionado ao Android 9 (nível 28 da API) ou versões anteriores, o sistema vai conceder automaticamente
a permissão android.permission.ACTIVITY_RECOGNITION
ao app, conforme necessário,
se o app atender a cada uma das seguintes condições:
- O arquivo de manifesto inclui a
permissão
com.google.android.gms.permission.ACTIVITY_RECOGNITION
. - O arquivo de manifesto não inclui a
permissão
android.permission.ACTIVITY_RECOGNITION
.
Se o sistema conceder automaticamente a permissão android.permission.ACTIVITY_RECOGNITION
, seu app manterá a permissão depois que ele for atualizado para ser direcionado ao
Android 10. 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.