O Google tem o compromisso de promover a igualdade racial para as comunidades negras. Saiba como.

Visão geral do armazenamento de dados e arquivos

O Android usa um sistema de arquivos parecido com sistemas de arquivos em disco de outras plataformas. O sistema oferece várias opções para você salvar os dados do seu app:

  • Armazenamento específico do app: armazene arquivos destinados apenas ao uso do seu app, seja em diretórios dedicados dentro de um volume de armazenamento interno ou em outros diretórios dedicados no armazenamento externo. Use os diretórios no armazenamento interno para salvar informações confidenciais que outros apps não podem acessar.
  • Armazenamento compartilhado: armazene arquivos que seu app pretende compartilhar com outros apps, incluindo mídia, documentos e outros arquivos.
  • Preferências: armazene dados privados e primários em pares de chave-valor.
  • Bancos de dados: armazene dados estruturados em um banco de dados particular usando a biblioteca de persistência Room.

As características dessas opções estão resumidas na tabela a seguir:

Tipo de conteúdo Método de acesso Permissões necessárias Outros apps podem acessar? Arquivos removidos na desinstalação do app?
Arquivos específicos do app Arquivos destinados apenas ao uso do seu app Do armazenamento interno, getFilesDir() ou getCacheDir()

Do armazenamento externo, getExternalFilesDir() ou getExternalCacheDir()
Nunca é necessário para armazenamento interno

Não é necessário para armazenamento externo quando seu app é executado em dispositivos que usam o Android 4.4 (API level 19) ou versões posteriores
Não, se os arquivos estiverem em um diretório dentro do armazenamento interno

Sim, se os arquivos estiverem em um diretório dentro do armazenamento externo
Sim
Mídia Arquivos de mídia compartilháveis (imagens, arquivos de áudio, vídeos) API MediaStore. READ_EXTERNAL_STORAGE ou WRITE_EXTERNAL_STORAGE ao acessar arquivos de outros apps no Android 10 (API de nível 29) ou versão mais recente

As permissões são necessárias para todos os arquivos no Android 9 (API de nível 28) ou versões anteriores
Sim, embora o outro app precise da permissão READ_EXTERNAL_STORAGE Não
Documentos e outros arquivos Outros tipos de conteúdo compartilhável, incluindo arquivos transferidos por download Estrutura de acesso ao armazenamento Nenhum Sim, por meio do seletor de arquivos do sistema Não
Preferências do app Pares de chave-valor Biblioteca de Preferências do Jetpack Nenhum Não Sim
Database Dados estruturados Biblioteca de persistência Room Nenhum Não Sim

A solução escolhida depende das suas necessidades específicas:

Quanto espaço seus dados exigem?
O armazenamento interno tem espaço limitado para dados específicos do app. Use outros tipos de armazenamento se você precisar salvar uma grande quantidade de dados.
Qual é o nível de confiabilidade do acesso aos dados?
Se a funcionalidade básica do seu app exigir determinados dados, como quando o app for inicializado, coloque-os no diretório de armazenamento interno ou em um banco de dados. Os arquivos específicos do app no armazenamento externo nem sempre são acessíveis porque alguns dispositivos permitem que os usuários removam um dispositivo físico que corresponda ao armazenamento externo.
Que tipo de dados você precisa armazenar?
Se você tiver dados significativos apenas para o app, use o armazenamento específico dele. Para conteúdo de mídia compartilhável, use o armazenamento compartilhado para que outros apps possam acessar o conteúdo. Para dados estruturados, use as preferências (para dados de chave-valor) ou um banco de dados (para dados que contenham mais de duas colunas).
Os dados precisam ser particulares para seu app?
Ao armazenar dados confidenciais, que não podem ser acessados por nenhum outro app, use o armazenamento interno, as preferências ou um banco de dados. O armazenamento interno tem o vantage adicional dos dados serem ocultados dos usuários.

Categorias de locais de armazenamento

O Android oferece dois tipos de locais de armazenamento físico: o armazenamento interno e o armazenamento externo. Na maioria dos dispositivos, o armazenamento interno é menor que o externo. No entanto, o armazenamento interno está sempre disponível em todos os dispositivos, tornando-se um lugar mais confiável para colocar dados indispensáveis para seu app.

Unidades removíveis, como um cartão SD, aparecem no sistema de arquivos como parte do armazenamento externo. O Android representa esses dispositivos usando um caminho, como /sdcard.

Os próprios apps são armazenados no armazenamento interno por padrão. No entanto, se o tamanho do APK for muito grande, você poderá indicar uma preferência no arquivo de manifesto do app para instalá-lo no armazenamento externo:

    <manifest ...
      android:installLocation="preferExternal">
      ...
    </manifest>
    

Permissões e acesso ao armazenamento externo

O Android define as seguintes permissões para o acesso de leitura e gravação ao armazenamento externo: READ_EXTERNAL_STORAGE e WRITE_EXTERNAL_STORAGE.

Em versões anteriores do Android, os apps precisavam declarar essas permissões para acessar qualquer arquivo fora dos diretórios específicos do app no armazenamento externo. As versões mais recentes do Android dependem mais da finalidade de um arquivo que da localização dele para determinar a capacidade de um app acessá-lo. Esse modelo de armazenamento baseado em objetivos melhora a privacidade do usuário porque os apps recebem acesso apenas às áreas do sistema de arquivos do dispositivo que realmente usam.

Armazenamento com escopo

Para dar mais controle aos usuários sobre os próprios arquivos e para limitar a sobrecarga, os apps que segmentam o Android 10 (API de nível 29) ou mais recentes recebem acesso com escopo ao armazenamento externo, ou armazenamento com escopo, por padrão. Esses apps só podem ter acesso ao diretório específico do app no armazenamento externo, bem como apenas a tipos específicos de mídia que o app criou.

Use o armazenamento com escopo, a menos que seu app precise acessar um arquivo armazenado fora de um diretório específico do app e fora de um diretório que as APIs MediaStore possam acessar. Se você armazenar arquivos específicos do app no armazenamento externo, será mais fácil adotar o armazenamento com escopo colocando esses arquivos em um diretório específico do app no armazenamento externo. Dessa forma, seu app manterá o acesso a esses arquivos quando o armazenamento com escopo estiver ativado.

Se seu app tiver outro caso de uso que não seja coberto pelo armazenamento com escopo, registre uma solicitação de recurso e use o recurso de compatibilidade de apps fornecido pela plataforma.

Práticas recomendadas para gerenciar arquivos

Esta seção apresenta algumas práticas recomendadas gerais para abrir e compartilhar arquivos do seu app.

Não abrir e fechar arquivos repetidamente

Para ajudar a manter o bom desempenho do app, não abra e feche o mesmo arquivo várias vezes. É mais pesado para o sistema abrir e ler um arquivo pela primeira vez.

Compartilhar arquivos individuais

Se você quiser compartilhar arquivos individuais ou dados de apps com outros apps, o Android traz as seguintes APIs:

Ver arquivos em um dispositivo

Para ver os arquivos armazenados em um dispositivo, use o Device File Explorer do Android Studio.

Outros recursos

Para mais informações sobre armazenamento de dados, consulte os seguintes recursos.

Vídeos