我正在使用ACTION_GET_CONTENT,以便用户可以选择其余代码可以读取和处理的文本文件。
Intent intent = new Intent();
intent.setAction(Intent.ACTION_GET_CONTENT);
intent.setType("text/*");
startActivityForResult(Intent.createChooser(intent, "select data"), SELECT_DATA);
上面是我的代码,以便用户可以浏览正常运行的代码。
Uri DataUri = data.getData();
File FileUri = new File(DataUri.getPath());
如果在使用getPath或getAbsolutePath之后将DataUri或FileUri转换为字符串,则会得到完全错误的路径。
路径应该是/ storage / emulated / 0 / Documents / myFile,但是它给了我/ document / primary:Documents / myFile。我不知道这个“主要:文档”是什么。
来自意图本身的数据已经具有错误的路径,有什么建议吗?
最佳答案
我正在使用ACTION_GET_CONTENT,以便用户可以选择文本文件
不,您正在使用ACTION_GET_CONTENT
,以便用户可以选择MIME类型为text/*
的某些内容。内容的来源很大程度上取决于用户。它可能是文件系统上的文件,也可能不是,如果是,则可能是您可以直接访问自己的文件(例如,Dropbox应用程序的内部存储,Android 4.4+设备上可移动存储中的文件) )。
路径应为/ storage / emulated / 0 / Documents / myFile
不,不应该。
但这给了我/ document / primary:Documents / myFile
您得到的内容将随处理ACTION_GET_CONTENT
请求的任何活动而变化。该活动是什么取决于用户安装了支持ACTION_GET_CONTENT
的内容以及用户从已安装内容列表中选择的内容。
通常,您会得到一个content
Uri
(即getScheme()
上的Uri
将返回content
),因为Uri
将指向ContentProvider
提供的数据。
来自意图本身的数据已经具有错误的路径
它具有正确的路径。它根本不是文件系统上的路径。
有什么建议么?
使用ContentResolver
和openInputStream()
获取InputStream
,以表示content
Uri
表示的内容。