Mengakses kartu SD

Anda dapat menyimpan dan mengakses data yang tidak penting pada kartu microSD opsional, terutama pada perangkat seluler bersifat murah yang memiliki penyimpanan internal terbatas dan memiliki slot untuk kartu SD.

Dalam kebanyakan kasus, Anda harus menentukan kemampuan removableStorage dalam file manifes aplikasi sebelum aplikasi Anda dapat menyimpan dan mengakses file di kartu SD. Biasanya Anda juga harus mendaftar untuk menangani jenis file yang disimpan dan diakses aplikasi Anda.

Anda dapat menyimpan dan mengakses file pada kartu SD opsional dengan menggunakan metode berikut:

Apa yang dapat dan tidak dapat Anda akses pada kartu SD

Apa yang dapat Anda akses

  • Aplikasi Anda hanya dapat membaca dan menulis file jenis file yang telah didaftarkan aplikasi untuk ditangani dalam file manifes aplikasi.
  • Aplikasi Anda juga dapat membuat dan mengelola folder.

Apa yang tidak dapat Anda akses

  • Aplikasi Anda tidak dapat melihat atau mengakses folder sistem dan file yang dikandungnya.
  • Aplikasi Anda tidak dapat melihat file yang ditandai dengan atribut Tersembunyi. Atribut Tersembunyi biasanya digunakan untuk mengurangi risiko menghapus data secara tidak sengaja.
  • Aplikasi Anda tidak dapat melihat atau mengakses pustaka Dokumen dengan menggunakan KnownFolders.DocumentsLibrary. Namun Anda dapat mengakses pustaka Dokumen pada kartu SD dengan melintas sistem file.

Pertimbangan keamanan dan privasi

Saat aplikasi menyimpan file di lokasi global pada kartu SD, file tersebut tidak dienkripsi sehingga biasanya dapat diakses oleh aplikasi lain.

  • Saat kartu SD berada di perangkat, file Anda dapat diakses oleh aplikasi lain yang telah mendaftar untuk menangani jenis file yang sama.
  • Saat kartu SD dihapus dari perangkat dan dibuka dari PC, file Anda terlihat di File Explorer dan dapat diakses oleh aplikasi lain.

Namun, saat aplikasi yang diinstal pada kartu SD menyimpan file di LocalFolder-nya, file tersebut dienkripsi dan tidak dapat diakses oleh aplikasi lain.

Persyaratan untuk mengakses file pada kartu SD

Untuk mengakses file pada kartu SD, biasanya Anda harus menentukan hal-hal berikut.

  1. Anda harus menentukan kemampuan removableStorage dalam file manifes aplikasi.
  2. Anda juga harus mendaftar untuk menangani ekstensi file yang terkait dengan jenis media yang ingin Anda akses.

Gunakan metode sebelumnya juga untuk mengakses file media pada kartu SD tanpa merujuk folder yang diketahui seperti KnownFolders.MusicLibrary, atau untuk mengakses file media yang disimpan di luar folder pustaka media.

Untuk mengakses file media yang disimpan di pustaka media—Musik, Foto, atau Video—dengan menggunakan folder yang diketahui, Anda hanya perlu menentukan kemampuan terkait dalam file manifes aplikasi—musicLibrary, picturesLibrary, atau videoLibrary. Anda tidak perlu menentukan kemampuan removableStorage . Untuk informasi selengkapnya, lihat File dan folder di pustaka Musik, Gambar, dan Video.

Mengakses file pada kartu SD

Mendapatkan referensi ke kartu SD

Folder KnownFolders.RemovableDevices adalah StorageFolder akar logis untuk kumpulan perangkat yang dapat dilepas yang saat ini terhubung ke perangkat. Jika kartu SD ada, StorageFolder pertama (dan hanya) di bawah folder KnownFolders.RemovableDevices mewakili kartu SD.

Gunakan kode seperti berikut untuk menentukan apakah kartu SD ada dan untuk mendapatkan referensi sebagai 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.
}

Catatan

Jika pembaca kartu SD Anda adalah pembaca yang disematkan (misalnya, slot di laptop atau PC itu sendiri), mungkin tidak dapat diakses melalui KnownFolders.RemovableDevices.

Mengkueri konten kartu SD

Kartu SD dapat berisi banyak folder dan file yang tidak dikenali sebagai folder yang diketahui dan tidak dapat dikueri dengan menggunakan lokasi dari KnownFolders. Untuk menemukan file, aplikasi Anda harus menghitung konten kartu dengan melintasi sistem file secara rekursif. Gunakan GetFilesAsync (CommonFileQuery.DefaultQuery) dan GetFoldersAsync (CommonFolderQuery.DefaultQuery) untuk mendapatkan konten kartu SD secara efisien.

Kami menyarankan agar Anda menggunakan utas latar belakang untuk melintasi kartu SD. Kartu SD mungkin berisi banyak gigabyte data.

Aplikasi Anda juga dapat mengharuskan pengguna untuk memilih folder tertentu dengan menggunakan pemilih folder.

Saat Anda mengakses sistem file pada kartu SD dengan jalur yang Anda dapatkan dari KnownFolders.RemovableDevices, metode berikut berulah dengan cara berikut.

  • Metode GetFilesAsync mengembalikan penyatuan ekstensi file yang telah Anda daftarkan untuk ditangani dan ekstensi file yang terkait dengan kemampuan pustaka media apa pun yang telah Anda tentukan.
  • Metode GetFileFromPathAsync gagal jika Anda belum mendaftar untuk menangani ekstensi file file yang coba Anda akses.

Mengidentifikasi kartu SD individual

Ketika kartu SD pertama kali dipasang, sistem operasi menghasilkan pengidentifikasi unik untuk kartu. Ini menyimpan ID ini dalam file di folder WPSystem di akar kartu. Aplikasi dapat menggunakan ID ini untuk menentukan apakah aplikasi mengenali kartu. Jika aplikasi mengenali kartu, aplikasi mungkin dapat menunda operasi tertentu yang telah selesai sebelumnya. Namun konten kartu dapat berubah sejak kartu terakhir diakses oleh aplikasi.

Misalnya, pertimbangkan aplikasi yang mengindeks ebook. Jika sebelumnya aplikasi telah memindai seluruh kartu SD untuk file ebook dan membuat indeks ebook, aplikasi dapat segera menampilkan daftar jika kartu dimasukkan ulang dan aplikasi mengenali kartu. Secara terpisah dapat memulai utas latar belakang berprioritas rendah untuk mencari ebook baru. Ini juga dapat menangani kegagalan untuk menemukan ebook yang ada sebelumnya ketika pengguna mencoba mengakses ebook yang dihapus.

Nama properti yang berisi ID ini adalah Windows Telepon. 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.
    }
}