Как получить доступ к подпапке, для которой я получаю разрешение родительской папки с помощью Android Storage Access Framework - PullRequest
0 голосов
/ 07 ноября 2019

Как вы знаете, 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);
    }

Как это исправить? Помогите мне, пожалуйста.

...