Compartilhar via


Acessar o cartão SD

Você pode armazenar e acessar dados não essenciais em um cartão microSD opcional, especialmente em dispositivos móveis de baixo custo que têm armazenamento interno limitado e têm um slot para um cartão SD.

Na maioria dos casos, você precisa especificar a funcionalidade removableStorage no arquivo de manifesto do aplicativo antes que seu aplicativo possa armazenar e acessar arquivos no cartão SD. Normalmente, você também precisa se registrar para lidar com o tipo de arquivos que seu aplicativo armazena e acessa.

Você pode armazenar e acessar arquivos no cartão SD opcional usando os seguintes métodos:

  • Seletores de arquivo.
  • As APIs de do Windows.Storage.

O que você pode ou não acessar no cartão SD

O que você pode acessar

  • Seu aplicativo só pode ler e gravar arquivos dos tipos de arquivo que foram registrados para gerenciar no arquivo de manifesto do aplicativo.
  • Seu aplicativo também pode criar e gerenciar pastas.

O que você não pode acessar

  • Seu aplicativo não pode ver ou acessar pastas do sistema e os arquivos que eles contêm.
  • Seu aplicativo não pode ver arquivos marcados com o atributo Oculto. O atributo Oculto normalmente é usado para reduzir o risco de exclusão acidental de dados.
  • Seu aplicativo não pode ver ou acessar a biblioteca de documentos usando KnownFolders.DocumentsLibrary. No entanto, você pode acessar a biblioteca de documentos no cartão SD atravessando o sistema de arquivos.

Considerações sobre segurança e privacidade

Quando um aplicativo salva arquivos em um local global no cartão SD, esses arquivos não são criptografados, portanto, normalmente são acessíveis a outros aplicativos.

  • Enquanto o cartão SD está no dispositivo, seus arquivos são acessíveis a outros aplicativos que se registraram para lidar com o mesmo tipo de arquivo.
  • Quando o cartão SD é removido do dispositivo e aberto de um computador, seus arquivos ficam visíveis no Explorador de Arquivos e acessíveis a outros aplicativos.

Quando um aplicativo instalado no cartão SD salva arquivos em seu LocalFolder, no entanto, esses arquivos são criptografados e não são acessíveis a outros aplicativos.

Requisitos para acessar arquivos no cartão SD

Para acessar arquivos no cartão SD, normalmente você precisa especificar os seguintes itens.

  1. Você precisa especificar a funcionalidade removableStorage no arquivo de manifesto do aplicativo.
  2. Você também precisa se registrar para lidar com as extensões de arquivo associadas ao tipo de mídia que deseja acessar.

Use o método anterior também para acessar arquivos de mídia no cartão SD sem fazer referência a uma pasta conhecida como KnownFolders.MusicLibrary ou para acessar arquivos de mídia armazenados fora das pastas da biblioteca de mídia.

Para acessar arquivos de mídia armazenados nas bibliotecas de mídia — Música, Fotos ou Vídeos — usando pastas conhecidas, você só precisa especificar a funcionalidade associada no arquivo de manifesto do aplicativo — musicLibrary, picturesLibrary ou videoLibrary. Você não precisa especificar a capacidade de armazenamento removível. Para obter mais informações, consulte Arquivos e pastas nas bibliotecas de Música, Imagens e Vídeos.

Acessando arquivos no cartão SD

Obtendo uma referência ao cartão SD

A pasta KnownFolders.RemovableDevices é a raiz lógica StorageFolder para o conjunto de dispositivos removíveis atualmente conectados ao dispositivo. Se um cartão SD estiver presente, o primeiro (e somente) StorageFolder abaixo da pasta KnownFolders.RemovableDevices representará o cartão SD.

Use um código como o seguinte para determinar se um cartão SD está presente e para obter uma referência a ele como um StorageFolder.

using Windows.Storage;

// Get the logical root folder for all external storage devices.
StorageFolder externalDevices = Windows.Storage.KnownFolders.RemovableDevices;

// Get the first child folder, which represents the SD card.
StorageFolder sdCard = (await externalDevices.GetFoldersAsync()).FirstOrDefault();

if (sdCard != null)
{
    // An SD card is present and the sdCard variable now contains a reference to it.
}
else
{
    // No SD card is present.
}

Observação

Se o leitor de cartão SD for um leitor inserido (por exemplo, um slot no laptop ou no próprio computador), ele poderá não estar acessível por meio de KnownFolders.RemovableDevices.

Consultando o conteúdo do cartão SD

O cartão SD pode conter muitas pastas e arquivos que não são reconhecidos como pastas conhecidas e não podem ser consultados usando um local de KnownFolders. Para localizar arquivos, seu aplicativo precisa enumerar o conteúdo do cartão atravessando o sistema de arquivos recursivamente. Use GetFilesAsync (CommonFileQuery.DefaultQuery) e GetFoldersAsync (CommonFolderQuery.DefaultQuery) para obter o conteúdo do cartão SD com eficiência.

Recomendamos que você use um thread em segundo plano para percorrer o cartão SD. Um cartão SD pode conter muitos gigabytes de dados.

Seu aplicativo também pode exigir que o usuário escolha pastas específicas usando o seletor de pastas.

Quando você acessa o sistema de arquivos no cartão SD com um caminho derivado de KnownFolders.RemovableDevices, os métodos a seguir se comportam da maneira a seguir.

  • O método GetFilesAsync retorna a união das extensões de arquivo que você registrou para manipular e as extensões de arquivo associadas a quaisquer recursos de biblioteca de mídia que você especificou.
  • O método GetFileFromPathAsync falhará se você não tiver se registrado para lidar com a extensão de arquivo do arquivo que está tentando acessar.

Identificando o cartão SD individual

Quando o cartão SD é montado pela primeira vez, o sistema operacional gera um identificador exclusivo para o cartão. Ele armazena essa ID em um arquivo na pasta WPSystem na raiz do cartão. Um aplicativo pode usar essa ID para determinar se ele reconhece o cartão. Se um aplicativo reconhecer o cartão, o aplicativo poderá adiar determinadas operações que foram concluídas anteriormente. No entanto, o conteúdo do cartão pode ter sido alterado desde a última vez que o cartão foi acessado pelo aplicativo.

Por exemplo, considere um aplicativo que indexa ebooks. Se o aplicativo já tiver verificado todo o cartão SD em busca de arquivos de ebook e criado um índice dos ebooks, ele poderá exibir a lista imediatamente se o cartão for reinserido e o aplicativo reconhecer o cartão. Separadamente, ele pode iniciar um thread em segundo plano de baixa prioridade para pesquisar novos ebooks. Ele também pode lidar com uma falha ao localizar um ebook que existia anteriormente quando o usuário tenta acessar o ebook excluído.

O nome da propriedade que contém essa ID é WindowsPhone.ExternalStorageId.

using Windows.Storage;

// Get the logical root folder for all external storage devices.
StorageFolder externalDevices = Windows.Storage.KnownFolders.RemovableDevices;

// Get the first child folder, which represents the SD card.
StorageFolder sdCard = (await externalDevices.GetFoldersAsync()).FirstOrDefault();

if (sdCard != null)
{
    var allProperties = sdCard.Properties;
    IEnumerable<string> propertiesToRetrieve = new List<string> { "WindowsPhone.ExternalStorageId" };

    var storageIdProperties = await allProperties.RetrievePropertiesAsync(propertiesToRetrieve);

    string cardId = (string)storageIdProperties["WindowsPhone.ExternalStorageId"];

    if (...) // If cardID matches the cached ID of a recognized card.
    {
        // Card is recognized. Index contents opportunistically.
    }
    else
    {
        // Card is not recognized. Index contents immediately.
    }
}