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 exige amplo acesso a arquivos em um dispositivo, mas não podem fazer isso de forma eficiente usando as práticas recomendadas de armazenamento com foco em privacidade. Nessas situações, o Android oferece acesso especial aos apps, conhecido como acesso a todos os arquivos.
Por exemplo, o caso de uso principal de um app antivírus pode exigir a verificação frequente de muitos arquivos em diretórios diferentes. Se essa verificação exigir várias interações repetidas do usuário para selecionar diretórios usando o seletor de arquivos do sistema, ela vai proporcionar uma experiência ruim ao usuário. Outros casos de uso, como apps gerenciadores de arquivos, de backup e restauração e de gerenciamento de documentos, exigem considerações semelhantes.
Solicitar acesso a todos os arquivos
Para pedir acesso a todos os arquivos do usuário, o app pode:
- Declarar a permissão
MANAGE_EXTERNAL_STORAGEno manifesto. - usar a ação da intent
ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSIONpara direcionar os usuários a uma página de configurações do sistema em que é possível ativar a opção: Permitir acesso para gerenciar todos os arquivos no app.
Para determinar se o app recebeu a permissão MANAGE_EXTERNAL_STORAGE, chame Environment.isExternalStorageManager().
Operações permitidas por MANAGE_EXTERNAL_STORAGE
A permissão MANAGE_EXTERNAL_STORAGE concede:
Acesso de leitura e gravação a todos os arquivos no armazenamento compartilhado.
Acesso ao conteúdo da tabela
MediaStore.Files.Acesso ao diretório raiz da unidade USB OTG e do cartão SD.
Acesso de gravação a todos os diretórios de armazenamento interno, exceto
/Android/data/,/sdcard/Androide a maioria dos subdiretórios de/sdcard/Android. Esse acesso de gravação inclui acesso ao caminho direto para o arquivo.Os apps que recebem essa permissão ainda não podem acessar os diretórios específicos do app que pertencem a outros aplicativos porque eles aparecem como subdiretórios de
Android/data/em um volume de armazenamento.
Quando um app tem a permissão MANAGE_EXTERNAL_STORAGE, ele pode acessar esses outros arquivos e diretórios usando a API MediaStore ou os caminhos diretos para os arquivos. No entanto, ao usar o framework de acesso ao armazenamento, só será possível acessar um arquivo ou diretório se isso puder ser feito sem a permissão MANAGE_EXTERNAL_STORAGE.
Invocar a atividade de gerenciamento de armazenamento de outro app
No Android 12 (nível 31 da API) e em versões mais recentes, os apps que têm as permissões MANAGE_EXTERNAL_STORAGE e QUERY_ALL_PACKAGES, como apps gerenciadores de arquivos, podem usar getManageSpaceActivityIntent() para direcionar os usuários até a atividade de gerenciamento de espaço personalizado de outro app.
O método getManageSpaceActivityIntent() recebe um nome de pacote e um código de solicitação, e retorna uma destas opções:
- Uma
PendingIntent, se o app com o nome do pacote especificado tiver definido uma atividade de "gerenciar espaço" personalizada. O app que chamou o métodogetManageSpaceActivityIntent()pode invocar a intent retornada para direcionar os usuários à atividade personalizada. null, se o app com o nome de pacote especificado não definir uma atividade "gerenciar espaço".
Ativar MANAGE_EXTERNAL_STORAGE para testes
Para entender como a permissão MANAGE_EXTERNAL_STORAGE afeta o app, ative-a em testes. Para fazer isso, execute o comando abaixo na máquina conectada ao dispositivo de teste:
adb shell appops set --uid PACKAGE_NAME MANAGE_EXTERNAL_STORAGE allow
Aviso do Google Play
Esta seção fornece um aviso aos desenvolvedores que publicam apps no Google Play.
Com o objetivo de limitar o amplo acesso ao armazenamento compartilhado, a política da Google Play Store foi atualizada para avaliar os apps destinados ao Android 11 (nível 30 da API) ou versões mais recentes que solicitam acesso a todos os arquivos com a permissão MANAGE_EXTERNAL_STORAGE. Essa política está em vigor desde maio de 2021.
Quando o app é direcionado ao Android 11 ou a versões mais recentes e declara a permissão MANAGE_EXTERNAL_STORAGE, o Android Studio mostra o alerta de lint da Figura 1. Esse aviso informa que a Google Play Store tem uma política que limita o uso da permissão.
MANAGE_EXTERNAL_STORAGE. Solicite a permissão MANAGE_EXTERNAL_STORAGE somente quando o app não puder usar efetivamente as APIs que proporcionam mais privacidade, como o framework de acesso ao armazenamento ou a API Media Store. O uso da permissão pelo app precisa estar dentro das finalidades permitidas e ser diretamente vinculado à função principal dele. Se o app incluir um caso de uso semelhante a qualquer um dos exemplos abaixo, é provável que ele possa solicitar a permissão MANAGE_EXTERNAL_STORAGE:
- Gerenciadores de arquivos
- Backup e restauração de apps
- Apps de antivírus
- Apps de gerenciamento de documentos
- Pesquisa de arquivos no dispositivo
- Criptografia de disco e arquivo
- Migração de dados de um dispositivo para outro