Udostępnij przez


Uzyskiwanie dostępu do karty SD

Możesz przechowywać i uzyskiwać dostęp do danych innych niż niezbędne na opcjonalnej karcie microSD, zwłaszcza na urządzeniach przenośnych o niskich kosztach, które mają ograniczony magazyn wewnętrzny i mają gniazdo dla karty SD.

W większości przypadków należy określić funkcję removableStorage w pliku manifestu aplikacji, zanim aplikacja będzie mogła przechowywać pliki na karcie SD i uzyskiwać do nich dostęp. Zazwyczaj konieczne jest również zarejestrowanie aplikacji w celu obsługi typów plików, które przechowuje i do których uzyskuje dostęp.

Pliki na opcjonalnej karcie SD można przechowywać i uzyskiwać do ich dostępu, korzystając z następujących metod:

  • Selektory plików.
  • Interfejsy API Windows.Storage.

Do czego masz i nie masz dostępu na karcie SD

Do czego możesz uzyskać dostęp

  • Aplikacja może odczytywać i zapisywać tylko pliki typów plików zarejestrowanych przez aplikację do obsługi w pliku manifestu aplikacji.
  • Aplikacja może również tworzyć foldery i zarządzać nimi.

Do czego nie możesz uzyskać dostępu

  • Aplikacja nie może wyświetlać folderów systemowych ani uzyskiwać do nich dostępu oraz plików, które zawierają.
  • Aplikacja nie widzi plików oznaczonych atrybutem Hidden. Atrybut Hidden jest zwykle używany do zmniejszenia ryzyka przypadkowego usunięcia danych.
  • Aplikacja nie może wyświetlać biblioteki Dokumentów ani uzyskiwać do jej dostępu przy użyciu pliku KnownFolders.DocumentsLibrary. Jednak możesz uzyskać dostęp do biblioteki Dokumenty na karcie SD, przechodząc przez system plików.

Zagadnienia dotyczące zabezpieczeń i prywatności

Gdy aplikacja zapisuje pliki w lokalizacji globalnej na karcie SD, te pliki nie są szyfrowane, więc są one zwykle dostępne dla innych aplikacji.

  • Gdy karta SD znajduje się na urządzeniu, pliki są dostępne dla innych aplikacji zarejestrowanych w celu obsługi tego samego typu pliku.
  • Po usunięciu karty SD z urządzenia i otwarciu z komputera pliki są widoczne w Eksploratorze plików i dostępne dla innych aplikacji.

Gdy aplikacja zainstalowana na karcie SD zapisuje pliki w folderze LocalFolder, jednak te pliki są szyfrowane i nie są dostępne dla innych aplikacji.

Wymagania dotyczące uzyskiwania dostępu do plików na karcie SD

Aby uzyskać dostęp do plików na karcie SD, zazwyczaj należy określić następujące elementy.

  1. W pliku manifestu aplikacji należy określić funkcję removableStorage.
  2. Musisz również zarejestrować się w celu obsługi rozszerzeń plików skojarzonych z typem nośnika, do którego chcesz uzyskać dostęp.

Użyj poprzedniej metody, aby uzyskać dostęp do plików multimedialnych na karcie SD bez odwoływania się do znanego folderu, takiego jak KnownFolders.MusicLibrary, lub aby uzyskać dostęp do plików multimedialnych przechowywanych poza folderami biblioteki multimediów.

pl-PL: Aby uzyskać dostęp do plików multimedialnych przechowywanych w bibliotekach takich jak Muzyka, Zdjęcia lub Wideo, przy użyciu znanych folderów, wystarczy określić odpowiednią funkcję w pliku manifestu aplikacji —musicLibrary, picturesLibrarylub videoLibrary. Nie trzeba określać możliwości wymiennychStorage. Aby uzyskać więcej informacji, zobacz Pliki i foldery w bibliotekach Muzyka, Obrazy i Wideo.

Uzyskiwanie dostępu do plików na karcie SD

Uzyskiwanie odwołania do karty SD

Folder KnownFolders.RemovableDevices jest logicznym folderem głównym StorageFolder dla kolekcji urządzeń wymiennych aktualnie podłączonych do urządzenia. Jeśli karta SD jest obecna, pierwszy (i tylko) folder StorageFolder poniżej folderu KnownFolders.RemovableDevices reprezentuje kartę SD.

Użyj kodu podobnego do poniższego, aby określić, czy karta SD jest obecna i uzyskać do niej odwołanie jako 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.
}

Uwaga / Notatka

Jeśli czytnik kart SD jest czytnikiem osadzonym (na przykład gniazdo na komputerze przenośnym lub samym komputerze), może być niedostępny za pośrednictwem aplikacji KnownFolders.RemovableDevices.

Wykonywanie zapytań dotyczących zawartości karty SD

Karta SD może zawierać wiele folderów i plików, które nie są rozpoznawane jako znane foldery i nie można wykonywać zapytań za pomocą lokalizacji z witryny KnownFolders. Aby znaleźć pliki, aplikacja musi wyliczyć zawartość karty, przechodząc rekursywnie przez system plików. Użyj polecenia GetFilesAsync (CommonFileQuery.DefaultQuery) i GetFoldersAsync (CommonFolderQuery.DefaultQuery), aby wydajnie pobrać zawartość karty SD.

Zalecamy użycie wątku w tle do przeszukiwania karty SD. Karta SD może zawierać wiele gigabajtów danych.

Aplikacja może również wymagać od użytkownika wybrania określonych folderów przy użyciu selektora folderów.

Gdy uzyskujesz dostęp do systemu plików na karcie SD przy użyciu ścieżki pochodzącej z KnownFolders.RemovableDevices, oto jak działają dane metody.

  • Metoda GetFilesAsync zwraca zbiór rozszerzeń plików, które zarejestrowałeś do obsługi, oraz rozszerzenia plików związane ze wszelkimi określonymi przez ciebie możliwościami biblioteki multimediów.
  • Metoda GetFileFromPathAsync kończy się niepowodzeniem, jeśli nie zarejestrowano funkcji obsługi rozszerzenia pliku, do którego próbujesz uzyskać dostęp.

Identyfikowanie indywidualnej karty SD

Po pierwszym zamontowaniu karty SD system operacyjny generuje unikatowy identyfikator karty. Przechowuje ten identyfikator w pliku w folderze WPSystem w folderze głównym karty. Aplikacja może użyć tego identyfikatora, aby określić, czy rozpoznaje kartę. Jeśli aplikacja rozpoznaje kartę, aplikacja może być w stanie odroczyć niektóre operacje, które zostały ukończone wcześniej. Jednak zawartość karty mogła ulec zmianie od czasu ostatniego dostępu do karty przez aplikację.

Rozważmy na przykład aplikację, która indeksuje książki elektroniczne. Jeśli aplikacja wcześniej przeskanowała całą kartę SD dla plików ebook i utworzyła indeks książek elektronicznych, może wyświetlić listę natychmiast, jeśli karta zostanie ponownie wystawiona, a aplikacja rozpozna kartę. Oddzielnie można uruchomić wątek w tle o niskim priorytcie, aby wyszukać nowe książki elektroniczne. Może również obsługiwać błąd podczas próby znalezienia ebooka, który istniał wcześniej, a teraz został usunięty, gdy użytkownik próbuje uzyskać do niego dostęp.

Nazwa właściwości zawierającej ten identyfikator to 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.
    }
}