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_STORAGE
no manifesto. - usar a ação da intent
ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION
para 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/Android
e 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