如何从指向 PDF 文档的 URI 获取文件路径? [英] How to get the file path from a URI that points to a PDF document?
问题描述
现在我的代码打开了默认的下载视图,它只显示我下载的 PDF.我选择了一个 PDF 文件,然后得到了这个:
Right now my code opens up the default downloads view and it only shows me the PDFs I downloaded. I choose a PDF file and I get this:
content://com.android.providers.downloads.documents/document/1171
content://com.android.providers.downloads.documents/document/1171
我想得到这个:
/storage/emulated/0/Download/ch22Databases.pdf
/storage/emulated/0/Download/ch22Databases.pdf
我的问题是如何在 Android 中执行此操作?
My question is how do I do this in Android?
我的代码:
public void PDF() {
PDF = (Button) findViewById(R.id.FindPDFBtn);//Finds the button in design and put it into a button variable.
PDF.setOnClickListener(//Listens for a button click.
new View.OnClickListener() {//Creates a new click listener.
@Override
public void onClick(View v) {//does what ever code is in here when the button is clicked
Intent intent = new Intent();
intent.setType("application/pdf");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent, "Select a PDF "), SELECT_PDF);
}
}
);
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
//PDF
if (resultCode == RESULT_OK) {
if (requestCode == SELECT_PDF) {
Uri selectedUri_PDF = data.getData();
SelectedPDF = getPDFPath(selectedUri_PDF);
}
}
}
public String getPDFPath(Uri uri) {
String[] projection = { MediaStore.Images.Media.DATA };
Cursor cursor = getContentResolver().query(uri, projection, null, null, null);
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
return cursor.getString(column_index);
}
推荐答案
在您的 getPDFPath
方法中添加以下代码片段:
Add this snippet below in your getPDFPath
method:
public String getPDFPath(Uri uri){
final String id = DocumentsContract.getDocumentId(uri);
final Uri contentUri = ContentUris.withAppendedId(
Uri.parse("content://downloads/public_downloads"), Long.valueOf(id));
String[] projection = { MediaStore.Images.Media.DATA };
Cursor cursor = getContentResolver().query(contentUri, projection, null, null, null);
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
return cursor.getString(column_index);
}
在您的情况下,此代码专门用于来自 DownloadProvider
的文档,为了进一步实施检查 Paul Burke 的回答.我个人使用他的 aFileChooser 库 来避免此类问题.
In your case, this code is specifically for documents from DownloadProvider
, for further implementation check Paul Burke's answer. I personally use his aFileChooser library to avoid this kind of problems.
这篇关于如何从指向 PDF 文档的 URI 获取文件路径?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!