Mengelola semua file di perangkat penyimpanan

Sebagian besar aplikasi yang memerlukan akses penyimpanan bersama dapat mengikuti praktik terbaik untuk berbagi file media dan membagikan file non-media. Namun, beberapa aplikasi memiliki kasus penggunaan inti yang memerlukan akses file yang luas di perangkat, tetapi tidak dapat melakukannya secara efisien menggunakan praktik terbaik penyimpanan yang ramah privasi. Android menyediakan akses aplikasi khusus yang disebut Akses semua file untuk situasi ini.

Misalnya, kasus penggunaan utama aplikasi antivirus mungkin memerlukan pemindaian reguler pada banyak file di berbagai direktori. Jika pemindaian ini memerlukan interaksi pengguna berulang untuk memilih direktori menggunakan alat pilih file sistem, pemindaian dapat memberikan pengalaman pengguna yang buruk. Kasus penggunaan lainnya, seperti aplikasi file manager, aplikasi pencadangan dan pemulihan, serta aplikasi pengelolaan dokumen, mungkin memerlukan pertimbangan yang serupa.

Meminta Akses semua file

Aplikasi dapat meminta Akses semua file dari pengguna dengan melakukan hal berikut:

  1. Deklarasikan izin MANAGE_EXTERNAL_STORAGE dalam manifes.
  2. Menggunakan tindakan intent ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION untuk mengarahkan pengguna ke halaman setelan sistem tempat mereka dapat mengaktifkan opsi berikut untuk aplikasi Anda: Izinkan akses untuk mengelola semua file.

Untuk menentukan apakah aplikasi Anda telah diberi izin MANAGE_EXTERNAL_STORAGE, panggil Environment.isExternalStorageManager().

Operasi yang diizinkan oleh MANAGE_EXTERNAL_STORAGE

Izin MANAGE_EXTERNAL_STORAGE memberikan hal berikut:

  • Akses baca dan tulis ke semua file dalam penyimpanan bersama.

  • Akses ke konten tabel MediaStore.Files.

  • Akses ke direktori utama drive OTG (on-the-go) USB dan kartu SD.

  • Akses tulis ke semua direktori penyimpanan internal⁠, kecuali untuk /Android/data/, /sdcard/Android, dan sebagian besar subdirektori /sdcard/Android. Akses tulis ini mencakup akses jalur file langsung.

    Aplikasi yang diberi izin ini tetap tidak dapat mengakses direktori khusus aplikasi milik aplikasi lain karena direktori ini ditampilkan sebagai subdirektori Android/data/ pada volume penyimpanan.

Jika aplikasi memiliki izin MANAGE_EXTERNAL_STORAGE, aplikasi tersebut dapat mengakses file dan direktori tambahan ini menggunakan MediaStore API atau jalur file langsung. Namun, saat Anda menggunakan Storage Access Framework, Anda hanya dapat mengakses file atau direktori jika Anda dapat melakukannya tanpa memiliki izin MANAGE_EXTERNAL_STORAGE.

Memanggil aktivitas pengelolaan penyimpanan aplikasi lain

Di Android 12 (API level 31) dan lebih tinggi, aplikasi yang memiliki izin MANAGE_EXTERNAL_STORAGE dan izin QUERY_ALL_PACKAGES, seperti aplikasi pengelolaan file, dapat menggunakan getManageSpaceActivityIntent() untuk mengarahkan pengguna ke aktivitas pengelolaan ruang kustom aplikasi lain.

Metode getManageSpaceActivityIntent() menggunakan nama paket dan kode permintaan, serta mengembalikan salah satu dari berikut ini:

  • PendingIntent, jika aplikasi dengan nama paket yang ditentukan telah menentukan aktivitas "kelola ruang" khusus. Aplikasi pengelolaan file yang memanggil metode getManageSpaceActivityIntent() kemudian dapat memanggil intent yang ditampilkan untuk mengarahkan pengguna ke aktivitas kustom.
  • null, jika aplikasi dengan nama paket yang ditentukan tidak menentukan aktivitas "kelola ruang".

Mengaktifkan MANAGE_EXTERNAL_STORAGE untuk pengujian

Untuk mempelajari pengaruh izin MANAGE_EXTERNAL_STORAGE terhadap aplikasi, Anda dapat mengaktifkan izin untuk tujuan pengujian. Untuk melakukannya, jalankan perintah berikut pada mesin yang terhubung ke perangkat pengujian Anda:

adb shell appops set --uid PACKAGE_NAME MANAGE_EXTERNAL_STORAGE allow

Pemberitahuan Google Play

Bagian ini memberikan pemberitahuan untuk developer yang memublikasikan aplikasi di Google Play.

Untuk membatasi akses luas ke penyimpanan bersama, Google Play Store telah memperbarui kebijakannya untuk mengevaluasi aplikasi yang menargetkan Android 11 (API level 30) atau lebih tinggi dan meminta "Semua akses file" melalui izin MANAGE_EXTERNAL_STORAGE. Kebijakan ini akan diterapkan pada Mei 2021.

Saat aplikasi Anda menargetkan Android 11 atau lebih baru, dan mendeklarasikan izin MANAGE_EXTERNAL_STORAGE, Android Studio akan menampilkan peringatan lint yang muncul pada gambar 1. Peringatan ini mengingatkan Anda bahwa "Google Play Store memiliki kebijakan yang membatasi penggunaan" izin tersebut.

Gambar 1. Peringatan lint di Android Studio yang mengingatkan Anda tentang kebijakan Google Play terkait izin MANAGE_EXTERNAL_STORAGE.

Anda harus meminta izin MANAGE_EXTERNAL_STORAGE hanya jika aplikasi Anda tidak dapat menggunakan API yang lebih ramah privasi secara efektif, seperti Storage Access Framework atau Media Store API. Selain itu, penggunaan izin oleh aplikasi harus berada dalam penggunaan yang diizinkan, dan harus terkait langsung dengan fungsi inti aplikasi. Jika aplikasi Anda menyertakan kasus penggunaan yang mirip dengan contoh berikut, kemungkinan aplikasi akan diizinkan untuk meminta izin MANAGE_EXTERNAL_STORAGE:

  • File manager
  • Aplikasi pencadangan dan pemulihan
  • Aplikasi antivirus
  • Aplikasi pengelolaan dokumen
  • Penelusuran file di perangkat
  • Enkripsi disk dan file
  • Migrasi data antarperangkat