Armazenamento Externo Android: o que é, tipos de mídia e como trabalhar no desenvolvimento

Autor: IT Sectr Publicado: 2026-03-13 Tempo de leitura: 11 min

O armazenamento externo em dispositivos móveis é uma mídia de dados removível que qualquer aplicativo com as permissões adequadas pode acessar. De acordo com o Android Open Source Project, 2026, a partir do Android 10, o Google introduziu o Scoped Storage — um modelo que restringe o acesso direto ao sistema de arquivos e exige o uso da API MediaStore para trabalhar com arquivos de mídia compartilhados. Essa abordagem aumenta a segurança dos dados do usuário e evita o vazamento de informações entre aplicativos.

Principais Pontos

  • External Storage — armazenamento removível (cartão SD, USB-OTG) disponível para leitura e gravação por diferentes aplicativos
  • Scoped Storage no Android 10+ restringe o acesso direto ao sistema de arquivos e o substitui pela API MediaStore
  • iOS não suporta cartões SD — o acesso a arquivos externos é feito através do Document Picker
  • Permissões READ_EXTERNAL_STORAGE e WRITE_EXTERNAL_STORAGE são obrigatórias para Android 9 e versões anteriores
  • Formatação do cartão SD como armazenamento interno ou portátil determina o modelo de acesso e criptografia

O que é armazenamento externo em dispositivos móveis?

Armazenamento externo é uma área de memória que não faz parte do sandbox protegido do aplicativo e é acessível a outros programas. No Android, esse termo geralmente se refere ao cartão SD, mas o armazenamento externo também inclui unidades USB conectadas via adaptador OTG e unidades em nuvem integradas ao nível do sistema de arquivos. A principal diferença do armazenamento interno é a falta de isolamento: qualquer aplicativo com as permissões adequadas pode ler e modificar arquivos no armazenamento externo.

No Android, o armazenamento externo tem dois modos principais: portátil e adotável. Quando um cartão SD é formatado como armazenamento portátil, ele permanece removível e é formatado em FAT32 ou exFAT. No modo de armazenamento adotável, o cartão é formatado em ext4 e criptografado com AES-128, e o sistema o trata como uma extensão da memória interna. O modo adotável está disponível desde o Android 6.0 Marshmallow, mas os fabricantes de dispositivos frequentemente desativam esse recurso em seus firmwares. De acordo com as estatísticas do Google Play Console, apenas cerca de 12% dos dispositivos Android suportam armazenamento adotável, portanto, não é recomendado confiar na expansão da memória interna via cartão SD como única opção.

No iOS, não há cartões SD tradicionais. A Apple usa uma arquitetura fechada onde todo o armazenamento é baseado em memória flash interna e iCloud. Unidades externas são suportadas através da porta Lightning ou USB-C, mas o acesso a elas é limitado ao gerenciador de arquivos do sistema Files e a aplicativos que se integram ao Document Picker. O usuário decide quais arquivos abrir de uma fonte externa — o aplicativo não pode escanear uma unidade conectada sem consentimento explícito.

Tipos de mídia externa e suas características

A escolha da mídia externa depende dos requisitos de velocidade, capacidade e portabilidade. Diferentes tipos de mídia têm características de velocidade, sistemas de arquivos e casos de uso variados em aplicativos móveis.

Tipo de mídiaCapacidade máx.Velocidade de leituraSistema de arquivos
SD UHS-I2 TBaté 104 MB/sexFAT / FAT32
SD UHS-II2 TBaté 312 MB/sexFAT / FAT32
USB 3.0 OTG2 TBaté 400 MB/sexFAT / NTFS / FAT32
USB-C SSD4 TBaté 1000 MB/sexFAT / APFS / NTFS

Cartões SD e classes de velocidade

Os cartões SD são classificados pela velocidade de gravação: Classe 10 (10 MB/s), U1 (10 MB/s), U3 (30 MB/s), V30 (30 MB/s) e V90 (90 MB/s). A gravação de vídeo 4K requer um cartão de pelo menos U3 ou V30. Para aplicativos móveis que trabalham com arquivos de mídia grandes (processamento de fotos, edição de vídeo), recomenda-se o uso de cartões de classe U3 e superiores. A velocidade do cartão afeta diretamente o desempenho do aplicativo: gravar vídeo 4K em um cartão Classe 10 pode causar queda de quadros devido à largura de banda insuficiente. Ao escolher um cartão SD para um aplicativo, preste atenção não apenas à classe de velocidade, mas também à classificação de Classe de Desempenho do Aplicativo: A1 e A2 indicam o desempenho mínimo de leitura e gravação aleatória, crítico para operações de banco de dados e cache do aplicativo.

Unidades USB-OTG

USB-OTG (On-The-Go) permite conectar unidades USB externas a um dispositivo móvel através de um adaptador. O Android suporta OTG desde a versão 3.1, mas montar a unidade requer um kernel com suporte ao sistema de arquivos. FAT32 e exFAT são suportados nativamente, NTFS — apenas em dispositivos com kernel personalizado ou através da biblioteca Paragon. No iOS, o suporte a unidades USB apareceu no iOS 13 com o aplicativo Files. Para trabalhar com uma unidade, o aplicativo deve usar UIDocumentPickerViewController, que fornece acesso apenas aos arquivos selecionados pelo usuário — o iOS não concede acesso total ao sistema de arquivos da unidade.

Armazenamento em nuvem como extensão

Serviços em nuvem — iCloud, Google Drive, Dropbox — podem se integrar ao sistema de arquivos do dispositivo através de provedores do sistema. No iOS, o iCloud Drive faz parte do contêiner Sandbox do aplicativo e os arquivos são sincronizados automaticamente entre os dispositivos do usuário. No Android, o Google Drive fornece uma API para ler e escrever arquivos, mas não ocorre montagem direta no sistema de arquivos. Para aplicativos móveis que trabalham com grandes volumes de dados, o armazenamento em nuvem pode servir como alternativa ao cartão SD, especialmente em dispositivos sem slot de expansão.

Como trabalhar com armazenamento externo no Android

Trabalhar com armazenamento externo no Android depende da versão do sistema operacional e do modelo Scoped Storage. O processo de acesso a arquivos difere para Android 9 e versões anteriores, Android 10–12 e Android 13+.

Acesso através da API MediaStore

A partir do Android 10, a principal maneira de acessar arquivos de mídia compartilhados é a API MediaStore. Esta API fornece uma interface unificada para ler e escrever imagens, vídeos e arquivos de áudio no armazenamento compartilhado. Um aplicativo não requer permissão READ_EXTERNAL_STORAGE para acessar seus próprios arquivos, mas a leitura de arquivos de outros aplicativos ainda requer permissão explícita do usuário. O MediaStore indexa automaticamente os arquivos de mídia e fornece um ContentResolver para consultá-los.

kotlin
val collection = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
    MediaStore.Images.Media.getContentUri(MediaStore.VOLUME_EXTERNAL_PRIMARY)
} else {
    MediaStore.Images.Media.EXTERNAL_CONTENT_URI
}

val projection = arrayOf(
    MediaStore.Images.Media._ID,
    MediaStore.Images.Media.DISPLAY_NAME
)

val cursor = contentResolver.query(collection, projection, null, null, null)

Após executar a consulta, você recebe um Cursor contendo os URIs dos arquivos. Para ler um arquivo, abra um InputStream através de contentResolver.openInputStream(uri). A gravação é feita de forma semelhante através de contentResolver.openOutputStream(uri). O MediaStore lida automaticamente com conflitos de nomes e fornece a capacidade de inserir novos arquivos através de contentResolver.insert(uri, values), que retorna o URI do arquivo criado.

Trabalho com arquivos arbitrários através do SAF

O Storage Access Framework (SAF) é a maneira recomendada de acessar arquivos arbitrários no Android 10+. O SAF fornece um diálogo do seletor de arquivos do sistema através do qual o usuário concede ao aplicativo acesso a um arquivo ou diretório específico. O aplicativo recebe um URI de acesso que permanece válido até o dispositivo ser reiniciado ou até a permissão ser revogada explicitamente nas configurações. O SAF não requer permissões READ_EXTERNAL_STORAGE ou WRITE_EXTERNAL_STORAGE, o que simplifica a publicação no Google Play e reduz o número de solicitações de permissão.

kotlin
val requestCode = 42
val intent = Intent(Intent.ACTION_OPEN_DOCUMENT_TREE)
intent.addFlags(
    Intent.FLAG_GRANT_READ_URI_PERMISSION
        or Intent.FLAG_GRANT_WRITE_URI_PERMISSION
)
startActivityForResult(intent, requestCode)

Como trabalhar com armazenamento externo no iOS

No iOS, o trabalho com arquivos externos é baseado no UIDocumentPickerViewController, que o usuário abre para selecionar arquivos ou diretórios específicos. O aplicativo não tem acesso direto ao sistema de arquivos da unidade externa — apenas aos arquivos que o usuário selecionou explicitamente. Após a seleção do arquivo, o aplicativo recebe uma URL temporária no contêiner Sandbox e pode trabalhar com o arquivo através do FileManager.

Usando UIDocumentPickerViewController

UIDocumentPickerViewController permite ao usuário selecionar um ou mais arquivos de qualquer fonte disponível: iCloud Drive, uma unidade USB conectada ou um serviço de nuvem de terceiros. Após a seleção, o controlador retorna uma matriz de URLs que o aplicativo pode ler durante a sessão. Para manter o acesso após o fechamento do aplicativo, você deve chamar startAccessingSecurityScopedResource() e salvar um bookmark de escopo de segurança no UserDefaults.

swift
let picker = UIDocumentPickerViewController(
    forOpeningContentTypes: [.data, .image],
    asCopy: true
)
picker.delegate = self

func documentPicker(
    controller: UIDocumentPickerViewController,
    didPickDocumentsAt urls: [URL]
) {
    guard let url = urls.first else { return }
    let data = try Data(contentsOf: url)
}

O parâmetro asCopy: true significa que o iOS copiará o arquivo para o contêiner Sandbox do aplicativo, e o aplicativo obterá sua própria cópia independente do arquivo original. Se asCopy: false for especificado, o aplicativo recebe uma referência ao arquivo original, mas para acessá-lo, deve-se chamar url.startAccessingSecurityScopedResource(). Sem esta chamada, a leitura do arquivo lançará uma exceção. Após terminar o trabalho com o arquivo, sempre chame url.stopAccessingSecurityScopedResource() para liberar o recurso e evitar vazamentos de descritores.

Limitações e segurança do armazenamento externo

A segurança do armazenamento externo é menor que a do armazenamento interno porque os arquivos são acessíveis a outros aplicativos. Qualquer aplicativo com permissão READ_EXTERNAL_STORAGE pode ler todos os arquivos no cartão SD, incluindo aqueles que seu aplicativo criou para armazenar temporariamente dados confidenciais. Um aplicativo malicioso pode escanear o cartão SD e extrair dados do usuário se eles não estiverem criptografados. Portanto, é fortemente recomendado não armazenar tokens de autenticação, senhas ou dados pessoais do usuário no armazenamento externo em texto simples.

No Android 10+, o Scoped Storage limita significativamente a capacidade dos aplicativos de acessar o sistema de arquivos compartilhado. Um aplicativo só pode ler arquivos que ele mesmo criou sem permissão, e acessar arquivos de outros aplicativos requer consentimento explícito do usuário através do diálogo SAF. No entanto, essa restrição não se aplica a aplicativos com versão de SDK alvo inferior a 29 — eles continuam funcionando sob o modelo antigo, criando risco para usuários que não atualizaram seus aplicativos. O Google Play exige targetSdkVersion 29+ para todos os aplicativos novos e atualizados desde 2021.

Formatação e criptografia são outro aspecto importante da segurança. Um cartão SD formatado como armazenamento portátil não é criptografado pelo sistema por padrão. Mesmo ao usar armazenamento adotável, a criptografia só é ativada se o fabricante do dispositivo habilitou esse recurso no firmware. Para proteger dados confidenciais salvos no armazenamento externo, use a biblioteca EncryptedFile do AndroidX Security, que criptografa cada arquivo separadamente usando AES256-GCM, independentemente da criptografia do sistema.

Recomendações para usar o armazenamento externo

O uso eficaz do armazenamento externo requer um equilíbrio entre disponibilidade de dados e segurança. Siga estas regras para garantir o armazenamento confiável dos arquivos do usuário.

  • Não armazene dados confidenciais no armazenamento externo sem criptografia. Use EncryptedFile ou EncryptedSharedPreferences para proteger tokens, senhas e dados pessoais
  • Verifique a disponibilidade do armazenamento externo antes de escrever: use Environment.getExternalStorageState() para verificar o status do cartão SD. O cartão pode estar removido, danificado ou indisponível para gravação
  • Use Scoped Storage no Android 10+ e SAF para acessar arquivos compartilhados. Isso reduz o número de permissões solicitadas e melhora a experiência do usuário
  • Sempre trate exceções ao trabalhar com armazenamento externo. Um arquivo pode ser excluído por outro aplicativo ou movido durante a leitura, causando uma FileNotFoundException
  • Aviso o usuário antes de gravar grandes quantidades de dados no armazenamento externo. Mostre um diálogo de confirmação e permita escolher um diretório através do SAF

É importante lembrar que o armazenamento externo não garante a integridade dos dados durante falhas. Os cartões SD têm um número limitado de ciclos de regravação, especialmente modelos econômicos das Classes 4 e 6. Com gravação intensiva (por exemplo, registro ou armazenamento em cache de dados em streaming), um cartão pode falhar em questão de meses. Para tais cenários, use memória interna ou armazenamento em nuvem, e salve apenas arquivos no armazenamento externo cuja perda o usuário considere aceitável. Verifique regularmente o status do cartão SD através de StatFs e notifique o usuário sobre erros críticos do sistema de arquivos.

Perguntas Frequentes

É necessária permissão para acessar o armazenamento externo no Android 13?

No Android 13+, a permissão READ_EXTERNAL_STORAGE foi substituída por permissões mais granulares: READ_MEDIA_IMAGES, READ_MEDIA_VIDEO e READ_MEDIA_AUDIO. Para outros tipos de arquivo, use o SAF.

Posso formatar um cartão SD como memória interna?

Sim, o recurso adoptable storage está disponível no Android 6.0+. O cartão é formatado em ext4 com criptografia AES-128. No entanto, muitos fabricantes desativam essa opção, e cerca de 88% dos dispositivos não suportam armazenamento adotável.

Como verificar se um cartão SD está instalado no dispositivo?

Use o método Environment.getExternalStorageState(), que retorna uma string de status. O valor MEDIA_MOUNTED significa que o cartão está disponível para leitura e gravação. Outros valores indicam erros ou ausência do cartão.

Qual é a diferença entre Scoped Storage e acesso total ao sistema de arquivos?

Scoped Storage restringe o aplicativo ao seu próprio contêiner e às galerias de mídia compartilhadas do MediaStore. O acesso total permite ler qualquer arquivo no dispositivo. O Scoped Storage aumenta a segurança dos dados do usuário e é obrigatório para novos aplicativos.

Como obter um URI para acessar um arquivo em um cartão SD através do SAF?

Inicie um Intent com a ação ACTION_OPEN_DOCUMENT_TREE, que abrirá um diálogo do seletor de diretórios do sistema. Após a seleção, você recebe uma permissão URI válida até a reinicialização. Salve este URI no SharedPreferences para uso posterior.

Resumo

  • External Storage — armazenamento removível (cartão SD, USB-OTG) acessível a todos os aplicativos com permissões adequadas
  • Scoped Storage no Android 10+ restringe o acesso direto ao sistema de arquivos e introduz a API MediaStore para arquivos de mídia
  • iOS não suporta cartões SD — o acesso a arquivos externos está disponível apenas através do UIDocumentPickerViewController
  • Os cartões SD são divididos em classes de velocidade: Classe 10, U1, U3, V30, V90 — U3 mínimo é necessário para gravação de vídeo 4K
  • A segurança do armazenamento externo é menor que a do armazenamento interno — criptografe dados confidenciais antes de gravar
  • O armazenamento adotável permite usar um cartão SD como extensão da memória interna, mas é suportado apenas em 12% dos dispositivos
  • Recomenda-se usar o SAF para acessar arquivos arbitrários e não armazenar dados críticos sem criptografia

Vamos desenvolver um aplicativo móvel chave na mão

A IT Sectr cria aplicativos para iOS e Android para startups e empresas desde 2017. Nós vamos aconselhá-lo e propor a melhor solução.

Discutir o projeto

Leia também