Accedere alla scheda SD

Puoi archiviare dati non essenziali su una scheda micro SD facoltativa e quindi accedervi, in particolare, nei dispositivi mobili a basso costo in cui lo spazio di archiviazione interno è limitato e che presentano uno slot per la scheda SD.

Nella maggior parte dei casi, occorre specificare la funzionalità removableStorage nel file manifesto dell'app prima che questa possa archiviare e accedere ai file nella scheda SD. In genere occorre anche registrarsi per gestire il tipo di file che l'app archivia e a cui accede.

È possibile archiviare e accedere ai file nella scheda SD facoltativa usando i metodi seguenti:

A cosa è possibile e non è possibile accedere nella scheda SD

Elementi a cui è possibile accedere

  • L'app può leggere e scrivere solo file dei tipi registrati dall'app per gestirli nel file manifesto dell'app.
  • L'app può anche creare e gestire cartelle.

Elementi a cui non è possibile accedere

  • L'app non può visualizzare o accedere alle cartelle di sistema e ai file contenuti.
  • L'app non può visualizzare i file contrassegnati con l'attributo Hidden. L'attributo Hidden viene in genere usato per ridurre il rischio di eliminazione accidentale dei dati.
  • L'app non può visualizzare o accedere alla raccolta Documenti usando KnownFolders.DocumentsLibrary. Tuttavia, è possibile accedere alla raccolta Documenti nella scheda SD tramite il file system.

Considerazioni sulla privacy e sulla sicurezza

Quando un'app salva i file in un percorso globale nella scheda SD, tali file non vengono crittografati in modo che siano in genere accessibili ad altre app.

  • Anche se la scheda SD si trova nel dispositivo, i file sono accessibili ad altre app registrate per gestire lo stesso tipo di file.
  • Quando la scheda SD viene rimossa dal dispositivo e aperta in un PC, i file sono visibili in Esplora file e accessibili ad altre app.

Quando un'app installata nella scheda SD salva i file nel relativo LocalFolder, tuttavia, tali file vengono crittografati e non sono accessibili ad altre app.

Requisiti per l'accesso ai file nella scheda SD

Per accedere ai file nella scheda SD, in genere è necessario specificare gli elementi seguenti.

  1. È necessario specificare la funzionalità removableStorage nel file manifesto dell'app.
  2. È anche necessario eseguire la registrazione per gestire le estensioni di file associate al tipo di supporto a cui si vuole accedere.

È possibile usare il metodo precedente anche per accedere ai file multimediali nella scheda SD senza fare riferimento a una cartella nota come KnownFolders.MusicLibrary o per accedere ai file multimediali archiviati all'esterno delle cartelle della libreria multimediale.

Per accedere ai file multimediali archiviati nelle librerie multimediali Musica, Foto o Video tramite cartelle note, è necessario specificare solo la funzionalità associata nel file manifesto dell'app musicLibrary, picturesLibraryo videoLibrary. È necessario specificare la funzionalità removableStorage. Per altre info, vedere File e cartelle nelle raccolte Musica, Immagini e Video.

Accesso ai file nella scheda SD

Ottenere un riferimento alla scheda SD

La cartella KnownFolders.RemovableDevices è la radice logica StorageFolder per il set di dispositivi rimovibili attualmente connessi al dispositivo. Se è presente una scheda SD, la prima (e unica) StorageFolder sotto la cartella KnownFolders.RemovableDevices rappresenta la scheda SD.

Usare codice simile al seguente per determinare se è presente una scheda SD e ottenere un riferimento come 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.
}

Nota

Se il lettore di schede SD è un lettore incorporato, ad esempio uno slot del portatile o del PC, potrebbe non essere accessibile tramite KnownFolders.RemovableDevices.

Esecuzione di query sul contenuto della scheda SD

La scheda SD può contenere molte cartelle e file che non sono riconosciuti come cartelle note e non possono essere sottoposte a query usando un percorso da KnownFolders. Per trovare i file, l'app deve enumerare i contenuti della scheda attraversando il file system in modo ricorsivo. È possibile GetFilesAsync (CommonFileQuery.DefaultQuery) e GetFoldersAsync (CommonFolderQuery.DefaultQuery ) per ottenere in modo efficiente i contenuti della scheda SD.

È consigliabile usare un thread in background per attraversare la scheda SD. Una scheda SD può contenere molti gigabyte di dati.

L'app può anche richiedere all'utente di scegliere cartelle specifiche usando la selezione cartelle.

Quando si accede al file system sulla scheda SD con un percorso derivato da KnownFolders.RemovableDevices, i metodi che seguono si comportano nel modo seguente.

  • Il metodo GetFilesAsync restituisce l'unione delle estensioni di file registrate per la gestione e le estensioni di file associate a qualsiasi funzionalità della libreria multimediale specificata.
  • Il metodo GetFileFromPathAsync ha esito negativo se non si è registrati per gestire l'estensione del file a cui si sta tentando di accedere.

Identificazione della singola scheda SD

Quando la scheda SD viene montata per la prima volta, il sistema operativo genera un identificatore univoco per la scheda. Consente di archiviare questo ID in un file nella cartella WPSystem nella radice della scheda. Un'app può usare questo ID per determinare se riconosce la scheda. Se un'app riconosce la scheda, l'app potrebbe essere in grado di posticipare determinate operazioni completate in precedenza. Tuttavia, il contenuto della scheda potrebbe essere cambiato dopo l'ultimo accesso alla scheda dall'app.

Si consideri, ad esempio, un'app che indicizza gli ebook. Se l'app ha analizzato in precedenza l'intera scheda SD per i file di ebook e ha creato un indice degli ebook, può visualizzare l'elenco immediatamente se la scheda viene reinserita e l'app riconosce la scheda. Separatamente può avviare un thread in background con priorità bassa per cercare nuovi ebook. Può anche gestire un errore nell'individuazione di un ebook esistente in precedenza quando l'utente tenta di accedere all'ebook eliminato.

Il nome della proprietà che contiene questo 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.
    }
}