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:
- Deklarasikan izin
MANAGE_EXTERNAL_STORAGE
dalam manifes. - 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 metodegetManageSpaceActivityIntent()
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.
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