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. Essa versão introduz 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
requestLegacyExternalStorage
atributo. 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 armazenamento com escopo modelo 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
ACTION_MANAGE_STORAGEação da intent. 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
MediaStore API para acessar
arquivos de mídia do armazenamento compartilhado por meio de caminhos de arquivos
diretos. Essas APIs
incluem o seguinte:
- A
FileAPI. - 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
ACTION_OPEN_DOCUMENT_TREE
ação da intent 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
ACTION_OPEN_DOCUMENT
ação da intent 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
RESTRICT_STORAGE_ACCESS_FRAMEWORKsinalização de compatibilidade do app. - Direcione o app ao Android 11 ou a versões mais recentes.
- Ative a
- Invoque uma intent com a ação
ACTION_OPEN_DOCUMENT_TREE. Verifique se o diretórioDownloadaparece 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
READ_EXTERNAL_STORAGE.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
READ_EXTERNAL_STORAGEpermissão, 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_STORAGEnas 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
WRITE_EXTERNAL_STORAGE permissão quanto a WRITE_MEDIA_STORAGE privilegiada
permissão 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 como gerenciar todos os arquivos em um dispositivo de armazenamento.
Outros recursos
Para mais informações sobre mudanças no armazenamento no Android 11, consulte os seguintes materiais: