Начиная с Android 11 и выше (API > 29), Environment.getexternalstoragedirectory() больше не будет работать. Поскольку большинство библиотек используют параметр java.io.file: Можно ли получить обычный файл из DocumentFile? Придется использовать DocumentFile. Но так как это медленно, я нашел лучшее решение здесь: https://www.reddit.com/r/androiddev/comments/725ee3/documentfile_is_dead_slow_heres/
Есть ли другой способ, чтобы мы могли использовать старые функции java.io.file, начиная с Android 11? Как мы можем использовать Document Поскольку они предоставили поддержку Environment.getexternalstoragedirectory() только до Android Q/Android 10, добавив android:requestLegacyExternalStorage="true" в тег приложения. Я хотел бы знать, как лучше всего обрабатывать файлы. Возможно, тот, который будет совместим со старым java.io.file и потребует меньше кода.
Чтобы открыть средство выбора папок:
Intent i = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE);
i.addCategory(Intent.CATEGORY_DEFAULT);
i.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION | Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION);
startActivityForResult(Intent.createChooser(i, "Choose Directory"), OPEN_DIRECTORY_REQUEST_CODE);
Онактивитирезультат:
getContentResolver().takePersistableUriPermission(
data.getData(),
Intent.FLAG_GRANT_WRITE_URI_PERMISSION | Intent.FLAG_GRANT_READ_URI_PERMISSION
);
DocumentFile documentFile = DocumentFile.fromTreeUri(this, data.getdata);
FileNotFound, если я попытаюсь получить файл с помощью Environment.getexternalstoragedirectory()