Mengakses penyimpanan eksternal di Android API 29

Sep 11 2020

Saya mencoba mencapai beberapa alat pembersihan. Semakin banyak produsen melarang perangkat rooting karena beberapa "alasan keamanan", dilarang untuk TIDAK meminta untuk membuka kunci.

Setelah API 28, kode ini akan membuat kesalahan:


ActivityCompat.requestPermissions(this, new String[]{
  Manifest.permission.READ_EXTERNAL_STORAGE,
  Manifest.permission.WRITE_EXTERNAL_STORAGE
}, 1); // Request permission or not, Will got same result

File rootFolder = Environment.getExternalStorageDirectory(); // That is working fine
rootFolder.listFiles(); // That will return null

Tentu, saya bisa menggunakan ini:

android:requestLegacyExternalStorage="true"

Tapi saya percaya itu akan terbunuh di masa depan.

Lantas, Adakah cara elegan untuk mengelola SDCard?

Jawaban

4 blackapps Sep 11 2020 at 07:10

Di Android 10 Environment.getExternalStorageDirectory()dan Environment.getExternalStoragePublicDirectory()akan mengembalikan jalur penyimpanan tetapi jalur tidak dapat dibaca atau ditulis.

  1. Untuk Android 10 Anda bisa terus menggunakan jalur yang disediakan oleh Environment.getExternalStorageDirectory () dan Environment.getExternalStoragePublicDirectory () jika Anda menambahkan android:requestLegacyExternalStorage="true"ke tag aplikasi dalam file manifes. Saat runtime, aplikasi Anda bisa memanggil Environment.isExternalStorageLegacy()untuk memeriksa apakah permintaan telah dilakukan.

  2. Kemungkinan lain (tidak diketahui) (hanya untuk Android 10) adalah menambahkan <uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />ke file manifes. Pengguna harus pergi ke pengaturan lanjutan aplikasi dan mengaktifkan dari Advanced settings Install unknown apps | Allow from this source. Hal yang menyenangkan dengan ini adalah pengguna dapat mengganti hak akses. Anda bisa membuatnya lebih mudah bagi pengguna jika Anda mengimplementasikan maksud di Settings.ACTION_APPLICATION_DETAILS_SETTINGSmana dia bisa mengubah setelan. Lucunya, Environment.isExternalStorageLegacy () juga mengembalikan nilai true.

  3. Mengompilasi untuk Android 11 kedua opsi tidak berfungsi pada perangkat Android 11. (Tapi mereka terus berfungsi untuk perangkat Android 10). Lokasi Environment.getExternalStorageDirectory () dan Environment.getExternalStoragePublicDirectory () adalah usable again in read mode and very often in write mode too. Dan ini bagus karena seseorang dapat dengan mudah membuat daftar isi direktori seperti Unduh atau Gambar atau DCIM / Kamera lagi menggunakan kelas File. Tetapi menambahkan <uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />ke file manifes dan mengimplementasikan maksud untuk Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSIONakan memberi aplikasi Anda akses baca / tulis untuk semua file bahkan pada kartu micro sd yang dapat dilepas. (Akhirnya Anda dapat menghapus larangan google karena tidak dapat membaca / menulis kartu micro sd Anda sendiri di perangkat Android Anda menggunakan aplikasi Anda sendiri). Environment.isExternalStorageManager()dapat digunakan untuk memeriksa apakah izin aktif / nonaktif. Selama Anda tidak mencoba mengunggah aplikasi Anda ke play store, Anda baik-baik saja.