java - 使用 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
:)
解决方案
错误的做法。
去掉那个愚蠢的函数 getFullPathFromTreeUri()。
DocumentFile
只需为获得的树 uri创建一个实例。
之后在实例上使用 createFile() 。
之前已经发布了精确的示例。
只是做一点谷歌搜索。
推荐阅读
- java - 如何将文件保存到 Android Q(API 29)上的公共(外部)存储?
- android - 如何将此 HATEOAS 格式的 json 转换为 android 中的模型对象?
- javascript - 如何将 json 值转换为 c# 中的字典并使用字符串值对其进行寻址?
- angular - Angular 运行单一测试(不是 fdescribe 或 fit)
- node.js - 为什么将异步函数传递给 Node.js Express.js 路由器?
- html - 如何修复引导轮播?
- php - 如何防止codepipeline删除webroot中的文件?
- azure-devops - Azure devops:检查其他版本的状态版本
- python - 为什么 Python 的 defaultdict 对 pickle 的行为很奇怪?
- reactjs - 反应钩子,在选择时设置状态