Atualizações de armazenamento no Android 11

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:

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.

  1. Verifique o espaço livre invocando a ação da intent ACTION_MANAGE_STORAGE.
  2. 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:

  1. Invoque uma intent com a ação ACTION_OPEN_DOCUMENT. Verifique se os diretórios Android/data/ e Android/obb/ não aparecem.
  2. Realize uma das seguintes ações:
  3. Invoque uma intent com a ação ACTION_OPEN_DOCUMENT_TREE. Verifique se o diretório Download 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

A primeira caixa de diálogo apresenta um link chamado Permitir nas configurações.
Figura 1. Caixa de diálogo exibida quando um app usa o armazenamento com escopo e solicita a permissã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 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:

Postagens do blog

Vídeos