O Android 11 (nível da API 30) melhorou ainda mais a plataforma, oferecendo melhor proteção a dados de apps e de usuários no armazenamento externo. Esta versão apresenta várias melhorias, como acesso ao caminho de arquivo bruto, operações de edição em lote para mídia e uma IU atualizada para o framework de acesso ao armazenamento.
A versão também oferece melhorias no armazenamento com escopo, facilitando a migração do uso desses modelos pelos desenvolvedores.
Aplicação de armazenamento com escopo
Apps direcionados ao Android 10 (nível da API 29) com Android 11 ainda podem solicitar o
atributo
requestLegacyExternalStorage
. Essa sinalização permite que os apps desativem temporariamente as
mudanças associadas
ao armazenamento com escopo, por exemplo, conceder acesso a diretórios e
tipos diferentes de arquivos de mídia. Depois que você atualizar seu app para direcioná-lo ao
Android 11, o sistema ignorará a sinalização
requestLegacyExternalStorage
.
Manter a compatibilidade com o Android 10
Se o app desativa o armazenamento com escopo quando for executado em dispositivos com o Android 10, recomendamos que você continue definindo requestLegacyExternalStorage
para true
no arquivo de manifesto do app. Dessa forma, o app pode continuar a se comportar como esperado em dispositivos com o Android 10.
Migrar dados para diretórios que são visíveis ao usar armazenamento com escopo
Se o app usa o modelo de armazenamento legado e era direcionado anteriormente ao Android 10 ou versões anteriores, ele pode estar armazenando dados em um diretório que não será acessível quando o modelo de armazenamento com escopo for ativado. Antes de direcioná-lo ao Android 11, migre os dados para um diretório compatível com o armazenamento com escopo.
Testar armazenamento com escopo
Para ativar o armazenamento com escopo no app, independentemente da versão do SDK de destino do app e dos valores da sinalização do manifesto, ative as seguintes sinalizações de compatibilidade de apps:
DEFAULT_SCOPED_STORAGE
(ativado em todos os apps por padrão)FORCE_ENABLE_SCOPED_STORAGE
(desativado em todos os apps por padrão)
Para desativar o armazenamento com escopo e usar o modelo de armazenamento legado, desmarque as duas sinalizações.
Gerenciar armazenamento
A partir do Android 11, os apps que usam o modelo de armazenamento com escopo podem acessar apenas os próprios arquivos de cache específicos do app. Se o app precisar gerenciar o armazenamento do dispositivo, siga as instruções para consultar o espaço livre.
- Verifique o espaço livre invocando a ação da intent
ACTION_MANAGE_STORAGE
. Se não houver espaço livre suficiente no dispositivo, solicite ao usuário que autorize a limpeza de todos os caches. Para fazer isso, invoque a ação da intent
ACTION_CLEAR_APP_CACHE
.
Diretório específico do app no armazenamento externo
A partir do Android 11, os apps não podem criar o próprio
diretório específico de apps no armazenamento externo. Para
acessar o diretório que o sistema fornece para seu app, chame
getExternalFilesDirs()
.
Acesso a arquivos de mídia
Para facilitar o acesso a mídia e manter a privacidade do usuário, o Android 11 introduz os recursos a seguir.
Realizar operações em lote
Para consistência entre os dispositivos e maior conveniência do usuário, o Android 11 adiciona vários métodos para facilitar o gerenciamento de grupos de arquivos de mídia.
Acessar arquivos usando caminhos de arquivos diretos e bibliotecas nativas
Para ajudar seu app a funcionar melhor com bibliotecas de mídia de terceiros,
o Android 11 permite que você use APIs diferentes da
API MediaStore
para acessar
arquivos de mídia do armazenamento compartilhado por meio de caminhos de arquivos
diretos. Essas APIs
incluem o seguinte:
- A API
File
- Bibliotecas nativas, como
fopen()
Acesso a dados de outros apps
Para proteger a privacidade do usuário, em dispositivos com Android 11 ou versões mais recentes, o sistema aumenta as restrições de acesso do seu app a diretórios privados de outros apps.
Acesso a diretórios de dados no armazenamento interno
O Android 9 (nível da API 28) começou a restringir quais apps podiam tornar os arquivos nos diretórios de dados no armazenamento interno deles amplamente acessíveis para outros apps. Os apps direcionados ao Android 9 ou versões mais recentes não podem tornar os arquivos dos diretórios de dados amplamente acessíveis.
O Android 11 amplia essa restrição. Caso seu app seja direcionado ao Android 11, ele não poderá acessar arquivos em diretórios de dados de outros apps, mesmo que o outro app seja direcionado ao Android 8.1 (nível da API 27) ou anterior e tenha tornado os arquivos no diretório de dados amplamente acessíveis.
Acesso a diretórios específicos do app no armazenamento externo
No Android 11, os apps não podem mais acessar arquivos em qualquer diretório dedicado e específico do app de outros aplicativos no armazenamento externo.
Restrições de acesso a documentos
Para dar aos desenvolvedores tempo para testes, as seguintes mudanças relacionadas ao Framework de acesso ao armazenamento (SAF, na sigla em inglês) a seguir entram em vigor somente se o app for direcionado ao Android 11 ou a versões mais recentes.
Acesso a diretórios
Não é mais possível usar a
ação da intent ACTION_OPEN_DOCUMENT_TREE
para solicitar acesso aos seguintes diretórios:
- O diretório raiz do volume de armazenamento interno.
- O diretório raiz de cada volume do cartão SD que o fabricante do dispositivo considera confiável, independentemente do cartão ser emulado ou removível. Um volume confiável é aquele que um app pode acessar na maioria das vezes.
- O diretório
Download
.
Acesso a arquivos
Não é mais possível usar a
ACTION_OPEN_DOCUMENT_TREE
ou a
ação da intent
ACTION_OPEN_DOCUMENT
para solicitar que o usuário selecione arquivos individuais dos
seguintes diretórios:
- O diretório
Android/data/
e todos os subdiretórios - O diretório
Android/obb/
e todos os subdiretórios.
Testar a mudança
Para testar essa mudança de comportamento, faça o seguinte:
- Invoque uma intent com a ação
ACTION_OPEN_DOCUMENT
. Verifique se os diretóriosAndroid/data/
eAndroid/obb/
não aparecem. - Realize uma das seguintes ações:
- Ative a
sinalização de compatibilidade do app
RESTRICT_STORAGE_ACCESS_FRAMEWORK
. - Direcione o app ao Android 11 ou a versões mais recentes.
- Ative a
sinalização de compatibilidade do app
- Invoque uma intent com a ação
ACTION_OPEN_DOCUMENT_TREE
. Verifique se o diretórioDownload
aparece e se o botão de ação associado com o diretório está esmaecido.
Permissões
O Android 11 introduz as seguintes mudanças relacionadas às permissões de armazenamento:
Criar para qualquer versão
As seguintes mudanças entrarão em vigor no Android 11, independentemente da versão do SDK de destino do seu app:
- A permissão de ambiente de execução Armazenamento foi renomeada para Arquivos e mídia.
Se o app não tiver desativado o armazenamento com escopo e solicitar a permissão
READ_EXTERNAL_STORAGE
, os usuários verão uma caixa de diálogo diferente em comparação ao Android 10. A caixa de diálogo indica que o app está solicitando acesso a fotos e mídia, como mostrado na Figura 1.Os usuários podem ver quais apps têm a permissão
READ_EXTERNAL_STORAGE
nas configurações do sistema. Na página Configurações > Privacidade > Gerenciador de permissões > Arquivos e mídia cada app com a permissão estará listado em Permitido para todos os arquivos. Se o app for direcionado ao Android 11, lembre-se de que esse acesso a "todos os arquivos" é somente para leitura. Para ler e gravar em todos os arquivos no armazenamento compartilhado usando esse app, a permissão Acesso a todos os arquivos é necessária.
Criar para o Android 11
Se o app for direcionado ao Android 11, tanto a permissão WRITE_EXTERNAL_STORAGE
quanto a permissão privilegiada WRITE_MEDIA_STORAGE
não fornecerão mais acesso adicional.
Lembre-se de que, em dispositivos que executam o Android 10 (API de nível 29) ou mais recente, seu app pode contribuir para coleções de mídia bem definidas, como MediaStore.Downloads
, sem solicitar permissões relacionadas ao armazenamento. Saiba mais sobre como solicitar apenas as permissões necessárias ao trabalhar com arquivos de mídia no seu app.
Acesso a todos os arquivos
A maioria dos apps que exigem acesso ao armazenamento compartilhado pode seguir as práticas recomendadas para compartilhar arquivos de mídia e compartilhar arquivos que não sejam de mídia. No entanto, alguns apps têm um caso de uso principal que requer amplo acesso a arquivos em um dispositivo, mas não podem fazer isso de forma eficiente usando as práticas recomendadas de armazenamento adequado para privacidade. Nessas situações, o Android oferece acesso especial a um app chamado Acesso a todos os arquivos. Para saber mais, consulte o guia de gerenciamento de todos os arquivos em um dispositivo de armazenamento.
Outros recursos
Para mais informações sobre as mudanças no armazenamento no Android 11, consulte os seguintes materiais: