首页 > 解决方案 > 使用 Intent.ACTION_OPEN_DOCUMENT_TREE 将文件写入目录

问题描述

使用Intent.ACTION_OPEN_DOCUMENT_TREE我希望能够在用户选择的位置写入文件的 FileChooser。由于文件选择器返回一个树 URI,我使用一个实用程序类,特别是方法FileUtil.getFullPathFromTreeUri,从这个问题中获取,将该 URI 转换为一个可用的 android 目录 URI。

例如: content://com.android.externalstorage.documents/tree/0A17-1D03%3ATest

转换为: /storage/0A17-1D03/Test

这是我到目前为止的代码:

@Override
public void onClick(View v) {
    Intent i = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE);
    i.addCategory(Intent.CATEGORY_DEFAULT);
    startActivityForResult(Intent.createChooser(i, "Choose a directory"), FILE_CHOOSER_REQUEST_CODE);
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    switch (requestCode) {
        case FILE_CHOOSER_REQUEST_CODE:
            if (data != null) {
                Log.i("URI", FileUtil.getFullPathFromTreeUri(data.getData(), getActivity()));
                dismiss();
            }
            break;
    }
}

如何在返回的位置写入文件FileUtil.getFullPathFromTreeUri?(例如/storage/0A17-1D03/Test:)

标签: javaandroid

解决方案


错误的做法。

去掉那个愚蠢的函数 getFullPathFromTreeUri()。

DocumentFile只需为获得的树 uri创建一个实例。

之后在实例上使用 createFile() 。

之前已经发布了精确的示例。

只是做一点谷歌搜索。


推荐阅读