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 luas ke file di perangkat, tetapi tidak dapat mengaksesnya secara efisien menggunakan praktik terbaik penyimpanan yang mengutamakan 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 pemilih file sistem, pemindaian akan memberikan pengalaman pengguna yang buruk. Kasus penggunaan lainnya, seperti aplikasi file manager, aplikasi pencadangan dan pemulihan, serta aplikasi pengelolaan dokumen, 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 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 /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 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 menampilkan salah satu dari berikut ini:

  • PendingIntent, jika aplikasi dengan nama paket yang ditentukan telah menentukan aktivitas "kelola ruang" kustom. 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 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 akses semua file melalui izin MANAGE_EXTERNAL_STORAGE. Kebijakan ini akan berlaku mulai 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 developer tentang kebijakan Google Play terkait izin MANAGE_EXTERNAL_STORAGE.

Minta izin MANAGE_EXTERNAL_STORAGE hanya jika aplikasi Anda tidak dapat memanfaatkan secara efektif API yang lebih mengutamakan privasi, seperti Storage Access Framework atau Media Store API. Penggunaan izin oleh aplikasi Anda harus sesuai dengan penggunaan yang diizinkan dan harus terkait langsung dengan fungsi inti aplikasi. Jika aplikasi Anda menyertakan kasus penggunaan yang serupa dengan salah satu hal berikut, kemungkinan aplikasi tersebut dapat 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