以下に私のコードを見つけてください。ユーザーがSDcardから選択したpdfドキュメントのファイルパスを取得する必要があります。問題は、URI.getPath()が以下を返すことです。
/file:///mnt/sdcard/my%20Report.pdf/my Report.pdf
正しいパスは:
/sdcard/my Report.pdf
注意してください stackoverflowで検索しましたが、画像またはビデオのfilePathを取得する例が見つかりましたPDFの場合にファイルパスを取得する方法の例はありません?
私のコード、すべてのコードではなく、pdf部分のみ:
public void openPDF(View v)
{
Intent intent = new Intent();
//intent.setType("pdf/*");
intent.setType("application/pdf");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent, "Select Pdf"), SELECT_PDF_DIALOG);
}
public void onActivityResult(int requestCode, int resultCode, Intent result)
{
if (resultCode == RESULT_OK)
{
if (requestCode == SELECT_PDF_DIALOG)
{
Uri data = result.getData();
if(data.getLastPathSegment().endsWith("pdf"))
{
String pdfPath = data.getPath();
}
else
{
CommonMethods.ShowMessageBox(CraneTrackActivity.this, "Invalid file type");
}
}
}
}
URIから正しいパスを取得する方法を教えてください。
File myFile = new File(uri.toString());
myFile.getAbsolutePath()
正しいパスを返す必要があります
[〜#〜] edit [〜#〜]
@Tronが示唆したように、作業コードは
File myFile = new File(uri.getPath());
myFile.getAbsolutePath()
ここに質問への答えがあります here
実際には、Camera Applicationの共有可能なContentProviderから取得する必要があります。
編集私のために働いた答えをコピーする
private String getRealPathFromURI(Uri contentUri) {
String[] proj = { MediaStore.Images.Media.DATA };
CursorLoader loader = new CursorLoader(mContext, contentUri, proj, null, null, null);
Cursor cursor = loader.loadInBackground();
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
String result = cursor.getString(column_index);
cursor.close();
return result;
}