Partilhar via


Aceda ao 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 o recurso 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:

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

O que pode acessar

  • A sua aplicação só pode ler e escrever ficheiros dos tipos de ficheiro que a aplicação registou para manipular no ficheiro de manifesto da aplicação.
  • Seu aplicativo também pode criar e gerenciar pastas.

Aquilo a que não pode aceder

  • Seu aplicativo não pode ver ou acessar as pastas do sistema e os arquivos que elas contêm.
  • Seu aplicativo não consegue ver os arquivos marcados com o atributo Oculto. O atributo Hidden é normalmente usado para reduzir o risco de excluir dados acidentalmente.
  • 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 de segurança e privacidade

Quando uma aplicação guarda ficheiros numa localização global no cartão SD, esses ficheiros não são encriptados, pelo que normalmente são acessíveis a outras aplicações.

  • Enquanto o cartão SD estiver no dispositivo, seus arquivos serã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 a partir de um PC, os seus ficheiros ficam visíveis no Explorador de Ficheiros e acessíveis a outras aplicações.

No entanto, quando uma aplicação instalada no cartão SD guarda ficheiros no seu LocalFolder, esses ficheiros são encriptados e não são acessíveis a outras aplicações.

Requisitos para aceder a ficheiros no cartão SD

Para acessar arquivos no cartão SD, normalmente você tem que especificar as seguintes coisas.

  1. Você precisa especificar o recurso 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 você 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 aceder a ficheiros multimédia armazenados nas bibliotecas multimédia — Música, Fotografias ou Vídeos — utilizando pastas conhecidas, só tem de especificar a funcionalidade associada no ficheiro de manifesto da aplicação —musicLibrary, picturesLibraryou videoLibrary. Não é necessário especificar a capacidade armazenamento removível. Para mais informações, consulte Ficheiros e pastas nas bibliotecas de Música, Imagens e Vídeos.

Aceder a ficheiros no cartão SD

Obter uma referência ao cartão SD

A pasta KnownFolders.RemovableDevices é a raiz lógica StorageFolder para o conjunto de dispositivos removíveis atualmente ligados ao sistema. Se um cartão SD estiver presente, a primeira (e única) StorageFolder abaixo da pasta KnownFolders.RemovableDevices representa 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ões SD for um leitor incorporado (por exemplo, uma ranhura no próprio portátil ou PC), poderá não estar acessível através 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 de forma eficiente.

Recomendamos que você use um thread de plano de fundo para atravessar 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 seguintes métodos se comportam da seguinte maneira.

  • O GetFilesAsync método 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 manipular a extensão de arquivo do arquivo que está tentando acessar.

Identificação do 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 esse ID em um arquivo na pasta WPSystem na raiz do cartão. Um aplicativo pode usar essa ID para determinar se 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 mudado desde que o cartão foi acessado pela última vez pelo aplicativo.

Por exemplo, considere um aplicativo que indexa ebooks. Se o aplicativo já escaneou todo o cartão SD para arquivos de ebook e criou um índice dos ebooks, ele pode 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 procurar novos ebooks. Ele também pode lidar com uma falha em encontrar 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.
    }
}