Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/209.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 无法使用'ACTION\u GET\u CONTENT'的Uri创建文件`_Android_Pdf_Uri - Fatal编程技术网

Android 无法使用'ACTION\u GET\u CONTENT'的Uri创建文件`

Android 无法使用'ACTION\u GET\u CONTENT'的Uri创建文件`,android,pdf,uri,Android,Pdf,Uri,我正在尝试从设备中选择pdf文件并将其上载到服务器操作获取内容用于从设备中选择pdf sel_book.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Intent intent = new Intent(); intent.setType("application/pdf");

我正在尝试从设备中选择pdf文件并将其上载到服务器<代码>操作获取内容用于从设备中选择pdf

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);
        }
    });
在“活动结果”中,我获取Uri并将其保存为字符串

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
。我需要用它来创建一个新文件<代码>文件selectedFile=新文件(selectedFilePath)。但它不会创建文件
selectedFile.isFile()
返回false。我不知道为什么。请帮我解决这个问题。提前谢谢

操作获取内容用于从设备中选择pdf

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);
        }
    });
这允许用户选择一段内容。它不必是文件

在“活动结果”中,我获取Uri并将其保存为字符串

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();
        }
    }
}
这不是使用
Uri
的方式

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

这不是文件系统路径。这是具有
内容
方案的
Uri
的一部分。您无法从
操作获取内容
获取文件。您会得到一个指向一段内容的
Uri
Uri
可以指向用户和其他应用程序选择的任何内容:

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

使用
ContentResovler
openInputStream()
获取任何内容的流。您可以直接使用它(无论您使用什么方式上传此内容),也可以使用该流制作包含该内容副本的您自己的文件,这样您就有了一个可以使用的文件。

谢谢。请帮我获取所选文件的文件系统路径。@Choxmi:没有文件系统路径。唯一的方法是使用
ContentResolver
openInputStream()
创建自己的文件,并将
FileOutputStream
添加到您控制的某个文件中。然后,使用标准Java I/O从输入流复制到输出流。然后,您就有了自己的文件和内容,可以用于您想要的任何目的。完成后,请随意删除该文件。明白了。非常感谢您的回复。