0

我正在使用这个来调用一个意图:

Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE);
intent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
startActivityForResult(intent, 42);

并选择我的外部 SD 卡的根目录,然后使用以下方法获取持久权限:

    @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == 42) {
        Uri treeUri = data.getData();
        this.getContentResolver().takePersistableUriPermission(treeUri, (Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION));
    }
}

我可以使用输出流将文件写入根目录(我的初始选择),但我不能写入任何其他子文件夹,除非我再次请求它们的权限并明确选择它们。

我现在没有做任何花哨的事情来确定我有权访问哪些文件夹,我只是创建一个 POC 并尝试将文件写入我选择并授予权限的文件夹的子文件夹。我使用下面的目标变量在 DocumentFile 对象上得到一个空异常:

DocumentFile dir = DocumentFile.fromTreeUri(cont, Uri.parse(myUriToRoot+"/subfolder"));
    DocumentFile destination = dir.createFile("image/jpeg", "myfile.jpg");

同样,如果我明确授予该子文件夹的权限,它就可以工作。我读过的所有内容都表明,您授予权限的文件夹下的所有现有子文件夹和任何新创建的文件夹都应该允许访问写入文件,但这对我不起作用。

我错过了什么?

TIA

编辑:我也尝试使用 URL 编码字符作为我的 URI 中的斜杠,但仍然无法正常工作,除非我直接选择子文件夹并再次调用我的意图。

4

1 回答 1

0

我能够解决这个问题,而不是直接将 fromTreeUri() 方法设置为子文件夹,将其保留在根目录,然后在另一个 DocumentFile 对象上使用 findFile,然后在下一个 DocumentFile 对象上使用 createFile。

于 2017-10-22T16:09:25.110 回答