无法使用`ACTION_GET_CONTENT`的Uri创建文件

时间:2017-03-01 21:38:44

标签: android pdf uri

我试图从设备中选择pdf文件并将其上传到服务器。 selenium.common.exceptions.NoSuchElementException: Message: Unable to find element with id == lst-ib 用于从设备中选择pdf。

ACTION_GET_CONTENT

在活动结果上我得到了Uri并将其保存为String。

sel_book.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent intent = new Intent();
            intent.setType("application/pdf");
            intent.setAction(Intent.ACTION_GET_CONTENT);
            startActivityForResult(Intent.createChooser(intent, "Select PDF"), 1);
        }
    });

结果路径为public void onActivityResult(int requestCode, int resultCode, Intent result) { if (resultCode == RESULT_OK) { if (requestCode == 1) { Uri uri = result.getData(); String uriString = uri.toString(); File myFile = new File(uriString); path = myFile.getAbsolutePath(); } } } 。我需要使用它来创建一个新文件。 /document/primary:Download/Aptitude_2016_17.pdf。但它并没有创建文件。 File selectedFile = new File(selectedFilePath);返回false。我不知道为什么会这样。请帮我解决这个问题。提前谢谢。

1 个答案:

答案 0 :(得分:1)

  

ACTION_GET_CONTENT用于从设备中选择pdf。

这允许用户选择一段内容。它不一定是文件。

  

在活动结果上我得到了Uri并将其保存为String。

这不是您使用Uri的方式。

  

结果路径为/document/primary:Download/Aptitude_2016_17.pdf。

这不是文件系统路径。这是具有Uri计划的content的一部分。您没有从ACTION_GET_CONTENT获取文件。你得到一个指向一段内容的UriUri可以指向用户和其他应用选择的任何内容

  • 您可以通过Uri方案
  • 访问file的文件
  • 一个文件,但是您无法访问的文件(例如,在另一个应用程序的内部存储上)
  • 数据库中BLOB列的内容
  • 需要下载的内容
  • 等等

使用ContentResovleropenInputStream()获取有关内容的流。直接使用它(使用您用于上传此内容的任何内容),或使用该流制作包含该内容副本的您自己的文件,以便您拥有可以使用的文件。