我正在使用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提供的数据。


  来自意图本身的数据已经具有错误的路径


它具有正确的路径。它根本不是文件系统上的路径。


  有什么建议么?


使用ContentResolveropenInputStream()获取InputStream,以表示content Uri表示的内容。

07-24 09:36
查看更多