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, conhecido como Acesso a todos os arquivos, aos apps.
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 interações repetidas do usuário para selecionar diretórios usando o seletor de arquivos do sistema, ela poderá 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, podem exigir considerações semelhantes.
Solicitar acesso a todos os arquivos
Para solicitar 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 com a permissão 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 apps 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,
você só vai poder acessar um arquivo ou diretório se puder fazer isso 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
A fim de entender a forma 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
exibido na Figura 1. Esse aviso lembra 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. Além disso, a aplicação da permissão precisa estar dentro dos usos permitidos e ser diretamente vinculada à função principal do app. Se o app incluir um caso de uso semelhante aos exemplos a seguir, é provável que você 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 dispositivo para dispositivo