Langsung ke konten

Paling sering dikunjungi

Terakhir dikunjungi

navigation

Menggunakan Scoped Directory Access

Aplikasi seperti aplikasi foto biasanya hanya memerlukan akses ke direktori tertentu dalam storage eksternal, seperti direktori Pictures. Pendekatan yang ada dalam mengakses storage eksternal tidak didesain untuk memberi kemudahan akses direktori tertarget untuk tipe aplikasi ini. Misalnya:

Android 7.0 menyediakan API yang disederhanakan untuk mengakses direktori storage eksternal umum.

Mengakses Direktori Storage Eksternal

Gunakan kelas StorageManager untuk mendapatkan instance StorageVolume yang tepat. Kemudian, buat maksud dengan memanggil metode StorageVolume.createAccessIntent() dari instance itu. Gunakan maksud ini untuk mengakses direktori storage eksternal. Untuk mendapatkan daftar semua volume yang tersedia, termasuk volume media lepas-pasang, gunakan StorageManager.getStorageVolumes().

Jika Anda memiliki informasi tentang file spesifik, gunakan StorageManager.getStorageVolume(File) untuk mendapatkan StorageVolume yang berisi file tersebut. Panggil createAccessIntent() pada StorageVolume ini untuk mengakses direktori storage eksternal untuk file tersebut.

Di volume kedua, seperti kartu SD eksternal, teruskan null saat memanggil createAccessIntent() untuk meminta akses ke seluruh volume, sebagai ganti direktori spesifik. createAccessIntent() akan mengembalikan null jika Anda meneruskan null ke volume utama, atau jika Anda meneruskan nama direktori yang tidak valid.

Cuplikan kode berikut adalah contoh cara membuka direktori Pictures dalam penyimpanan bersama utama:

StorageManager sm = (StorageManager)getSystemService(Context.STORAGE_SERVICE);
StorageVolume volume = sm.getPrimaryStorageVolume();
Intent intent = volume.createAccessIntent(Environment.DIRECTORY_PICTURES);
startActivityForResult(intent, request_code);

Sistem ini mencoba untuk memberikan akses ke direktori eksternal, dan jika diperlukan mengonfirmasi akses dengan pengguna menggunakan UI yang disederhanakan:

Gambar 1. Sebuah aplikasi yang meminta akses ke direktori Pictures.

Jika pengguna memberi akses, sistem akan memanggil penggantian onActivityResult() Anda dengan kode hasil RESULT_OK, dan data maksud yang berisi URI. Gunakan URI yang disediakan untuk mengakses informasi direktori, serupa dengan menggunakan URI yang dikembalikan oleh Storage Access Framework.

Jika pengguna tidak memberi akses, sistem akan memanggil penggantian onActivityResult() Anda dengan kode hasil RESULT_CANCELED, dan data maksud null.

Mendapatkan akses ke direktori eksternal tertentu juga akan memperoleh akses ke subdirektori dalam direktori tersebut.

Mengakses Direktori pada Media Lepas-Pasang

Untuk menggunakan Scoped Directory Access guna mengakses direktori pada media lepas-pasang, pertama tambahkan BroadcastReceiver yang akan mendengarkan notifikasi MEDIA_MOUNTED, misalnya:

<receiver
    android:name=".MediaMountedReceiver"
    android:enabled="true"
    android:exported="true" >
    <intent-filter>
        <action android:name="android.intent.action.MEDIA_MOUNTED" />
        <data android:scheme="file" />
    </intent-filter>
</receiver>

Bila pengguna memasang media lepas-pasang, seperti kartu SD, sistem akan mengirimkan notifikasi MEDIA_MOUNTED. Notifikasi ini memberikan sebuah objek StorageVolume dalam data maksud yang bisa Anda gunakan untuk mengakses direktori pada media lepas-pasang. Contoh berikut mengakses direktori Pictures pada media lepas-pasang:

// BroadcastReceiver has already cached the MEDIA_MOUNTED
// notification Intent in mediaMountedIntent
StorageVolume volume = (StorageVolume)
    mediaMountedIntent.getParcelableExtra(StorageVolume.EXTRA_STORAGE_VOLUME);
volume.createAccessIntent(Environment.DIRECTORY_PICTURES);
startActivityForResult(intent, request_code);

Praktik Terbaik

Bila memungkinkan, pertahankan URI akses direktori eksternal sehingga Anda tidak perlu berulang kali meminta akses ke pengguna. Setelah pengguna memberikan akses, panggil getContentResolver() dan dengan ContentResolver yang dikembalikan, panggil takePersistableUriPermission() dengan URI akses direktori. Sistem akan mempertahankan URI dan permintaan akses berikutnya akan mengembalikan RESULT_OK dan tidak menampilkan UI konfirmasi kepada pengguna.

Jika pengguna menolak akses ke direktori eksternal, jangan langsung meminta akses lagi. Berulang kali meminta akses akan menghasilkan pengalaman pengguna yang buruk. Jika permintaan ditolak oleh pengguna, dan aplikasi meminta akses lagi, UI akan menampilkan kotak centang Don't ask again:

Gambar 1. Sebuah aplikasi membuat permintaan kedua untuk mengakses media lepas-pasang.

Jika pengguna memilih Don't ask again dan menolak permintaan, semua permintaan berikutnya untuk direktori yang diberikan dari aplikasi Anda secara otomatis akan ditolak, dan tidak ada UI permintaan yang akan ditampilkan ke pengguna.

Situs ini menggunakan cookies untuk menyimpan preferensi Anda tentang bahasa di situs tertentu dan opsi tampilan.

Dapatkan berita dan tips terbaru dari developer Android yang akan membantu Anda mencapai kesuksesan di Google Play.

* Wajib Diisi

Hore!

Ikuti Google Developers di WeChat

Buka situs ini dalam bahasa ?

Anda meminta halaman dalam bahasa , namun preferensi bahasa untuk situs ini adalah .

Ingin mengubah preferensi bahasa dan mengakses situs ini dalam bahasa ? Jika nanti Anda ingin mengubah preferensi bahasa, gunakan menu bahasa di bagian bawah setiap halaman.

Kelas ini memerlukan tingkat API atau yang lebih tinggi

Dokumen ini tersembunyi karena level API yang Anda pilih untuk dokumentasi ini adalah . Anda dapat mengubah level API dokumentasi dengan pemilih di atas menu navigasi sebelah kiri.

Untuk informasi lebih lanjut tentang menentukan level API yang diperlukan aplikasi Anda, baca Mendukung Versi Platform Yang Berbeda.

Take a short survey?
Help us improve the Android developer experience. (April 2018 — Developer Survey)