Android 无法使用'ACTION\u GET\u CONTENT'的Uri创建文件`
我正在尝试从设备中选择pdf文件并将其上载到服务器<代码>操作获取内容用于从设备中选择pdfAndroid 无法使用'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");
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从输入流复制到输出流。然后,您就有了自己的文件和内容,可以用于您想要的任何目的。完成后,请随意删除该文件。明白了。非常感谢您的回复。