使用
Intent.ACTION_OPEN_DOCUMENT_TREE
中的 FileChooser 我希望能够在用户选择的位置写入文件。由于文件选择器返回一个 Tree URI,我使用一个实用程序类,特别是方法 FileUtil.getFullPathFromTreeUri
(取自 this Question)将该 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
)
错误的做法。
废除那个愚蠢的函数 getFullPathFromTreeUri()。
只需为获得的树uri创建一个
DocumentFile
实例即可。
之后在实例上使用 createFile() 。