Как вы знаете, Android Q имеет силу использовать Storage Access Framework, если вы используете Environment Storage Directory. Однако я позволил пользователю выбрать корневую папку «Хранилище» («Storage Environment Directory») в качестве корневой папки, в которую я могу создать дочернюю папку «Папка». Затем мне нужно добавить больше папок в папку. Но есть некоторые проблемы.
Я использовал эти коды, чтобы получить разрешение для корневой родительской папки.
Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE);
intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION
| Intent.FLAG_GRANT_WRITE_URI_PERMISSION
| Intent.FLAG_GRANT_PREFIX_URI_PERMISSION
| Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION);
if (!TextUtils.isEmpty(intentType)) {
intent.setType(intentType);
}
activity.startActivityForResult(intent, requestCode);
Затем я получаю URI от onActivityResult (). Я могу создать дочернюю папку с именем A folder через этот uri и разрешение.
public static String createDirByUri(Context context, String uri, String dirName) {
if (context == null || TextUtils.isEmpty(uri) || TextUtils.isEmpty(dirName)) {
return null;
}
DocumentFile parentDocumentFile = DocumentFile.fromTreeUri(context, Uri.parse(uri));
DocumentFile childDocumentFile = parentDocumentFile.findFile(dirName);
if (childDocumentFile != null) {
return childDocumentFile.getUri().toString();
}
childDocumentFile = parentDocumentFile.createDirectory(dirName);
if (childDocumentFile == null) {
return null;
} else {
return childDocumentFile.getUri().toString();
}
}
Но затем я использую папку A, чтобы создать еще одну папку, в которой она создает папку в родительском каталоге uri, а не в Aпапки.
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
if (requestCode == 1 && resultCode == Activity.RESULT_OK) {
if (data != null) {
String demoDir = FileUtils.createDirByUri(this,data.getData().toString(),"A");
Log.e("demoDir", demoDir);
String childDir = FileUtils.createDirByUri(this,demoDir,"child");
Log.e("child", childDir);
}
}
super.onActivityResult(requestCode, resultCode, data);
}
Как это исправить? Помогите мне, пожалуйста.