Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Puede almacenar y acceder a datos no esenciales en una tarjeta microSD opcional, especialmente en dispositivos móviles de bajo costo que tienen almacenamiento interno limitado y tienen una ranura para una tarjeta SD.
En la mayoría de los casos, debes especificar la funcionalidad extraíbleStorage en el archivo de manifiesto de la aplicación antes de que la aplicación pueda almacenar y acceder a los archivos en la tarjeta SD. Normalmente, también tienes que registrarte para controlar el tipo de archivos a los que la aplicación almacena y accede.
Puede almacenar y acceder a archivos en la tarjeta SD opcional mediante los métodos siguientes:
- Selectores de archivos.
- Las API de Windows.Storage.
A qué puede y no puede acceder en la tarjeta SD
A lo que puede acceder
- La aplicación solo puede leer y escribir archivos de tipos de archivo que la aplicación ha registrado para controlar en el archivo de manifiesto de la aplicación.
- La aplicación también puede crear y administrar carpetas.
A lo que no puedes acceder
- La aplicación no puede ver ni acceder a las carpetas del sistema ni a los archivos que contienen.
- La aplicación no puede ver los archivos marcados con el atributo Hidden. El atributo Hidden se usa normalmente para reducir el riesgo de eliminar datos accidentalmente.
- La aplicación no puede ver ni acceder a la biblioteca de documentos mediante KnownFolders.DocumentsLibrary. Sin embargo, puede acceder a la biblioteca de documentos en la tarjeta SD si navega por el sistema de archivos.
Consideraciones de seguridad y privacidad
Cuando una aplicación guarda archivos en una ubicación global en la tarjeta SD, esos archivos no se cifran para que normalmente sean accesibles para otras aplicaciones.
- Mientras la tarjeta SD está en el dispositivo, los archivos son accesibles para otras aplicaciones que se han registrado para controlar el mismo tipo de archivo.
- Cuando se quita la tarjeta SD del dispositivo y se abre desde un equipo, los archivos son visibles en el Explorador de archivos y son accesibles para otras aplicaciones.
Cuando una aplicación instalada en la tarjeta SD guarda los archivos en su LocalFolder, sin embargo, esos archivos se cifran y no son accesibles para otras aplicaciones.
Requisitos para acceder a archivos en la tarjeta SD
Para acceder a los archivos de la tarjeta SD, normalmente debe especificar lo siguiente.
- Debe especificar la funcionalidad extraíbleStorage en el archivo de manifiesto de la aplicación.
- También tiene que registrarse para controlar las extensiones de archivo asociadas al tipo de medio al que desea acceder.
Use el método anterior también para acceder a los archivos multimedia de la tarjeta SD sin hacer referencia a una carpeta conocida, como KnownFolders.MusicLibrary, o para acceder a los archivos multimedia almacenados fuera de las carpetas de la biblioteca multimedia.
Para acceder a los archivos multimedia almacenados en las bibliotecas multimedia (Música, Fotos o Vídeos) mediante carpetas conocidas, solo tienes que especificar la funcionalidad asociada en el archivo de manifiesto de la aplicación,musicLibrary, picturesLibraryo videoLibrary. No es necesario especificar la capacidad de almacenamiento extraíble . Para obtener más información, consulta Archivos y carpetas en las bibliotecas de Música, Imágenes y Videos.
Acceso a archivos en la tarjeta SD
Obtener una referencia a la tarjeta SD
La carpeta KnownFolders.RemovableDevices es la raíz lógica StorageFolder para el conjunto de dispositivos extraíbles conectados actualmente al dispositivo. Si hay una tarjeta SD, la primera (y única) StorageFolder debajo de la carpeta KnownFolders.RemovableDevices representa la tarjeta SD.
Use código como el siguiente para determinar si una tarjeta SD está presente y obtener una referencia a ella como una 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:
Si el lector de tarjetas SD es un lector incrustado (por ejemplo, una ranura en el equipo portátil o el propio equipo), es posible que no sea accesible a través de KnownFolders.RemovableDevices.
Consulta del contenido de la tarjeta SD
La tarjeta SD puede contener muchas carpetas y archivos que no se reconocen como carpetas conocidas y no se pueden consultar mediante una ubicación de KnownFolders. Para buscar archivos, la aplicación tiene que enumerar el contenido de la tarjeta cruzando el sistema de archivos de forma recursiva. Use getFilesAsync (CommonFileQuery.DefaultQuery) y GetFoldersAsync (CommonFolderQuery.DefaultQuery) para obtener el contenido de la tarjeta SD de forma eficaz.
Se recomienda usar un subproceso en segundo plano para recorrer la tarjeta SD. Una tarjeta SD puede contener muchos gigabytes de datos.
La aplicación también puede requerir que el usuario elija carpetas específicas mediante el selector de carpetas.
Al acceder al sistema de archivos de la tarjeta SD con una ruta de acceso derivada de KnownFolders.RemovableDevices, los métodos siguientes se comportan de la siguiente manera.
- El método GetFilesAsync devuelve la unión de las extensiones de archivo registradas para controlar y las extensiones de archivo asociadas a cualquier funcionalidad de biblioteca multimedia que haya especificado.
- Se produce un error en el método GetFileFromPathAsync si no se ha registrado para controlar la extensión de archivo del archivo al que está intentando acceder.
Identificación de la tarjeta SD individual
Cuando la tarjeta SD se monta por primera vez, el sistema operativo genera un identificador único para la tarjeta. Almacena este identificador en un archivo de la carpeta WPSystem en la raíz de la tarjeta. Una aplicación puede usar este identificador para determinar si reconoce la tarjeta. Si una aplicación reconoce la tarjeta, es posible que la aplicación pueda posponer determinadas operaciones que se completaron anteriormente. Sin embargo, el contenido de la tarjeta puede haber cambiado desde que la aplicación accedió por última vez a la tarjeta.
Por ejemplo, considere una aplicación que indexa los libros electrónicos. Si la aplicación ha examinado previamente toda la tarjeta SD para los archivos de libro electrónico y ha creado un índice de los libros electrónicos, puede mostrar la lista inmediatamente si la tarjeta se vuelve a insertar y la aplicación reconoce la tarjeta. Por separado, puede iniciar un subproceso en segundo plano de prioridad baja para buscar nuevos libros electrónicos. "También puede gestionar la imposibilidad de encontrar un libro electrónico que existía antes cuando el usuario intenta acceder al libro electrónico eliminado."
El nombre de la propiedad que contiene este identificador es 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.
}
}