web-dev-qa-db-fra.com

Comment obtenir le chemin du fichier depuis l'URI?

Veuillez trouver mon code ci-dessous. J'ai besoin d'obtenir le chemin du fichier du document pdf, sélectionné par l'utilisateur depuis SDcard. Le problème est que URI.getPath () renvoie:

/file:///mnt/sdcard/my%20Report.pdf/my Report.pdf

Le chemin correct est:

/sdcard/my Report.pdf

Veuillez noter que j'ai recherché sur stackoverflow mais trouvé l'exemple d'obtention du filePath de l'image ou de la vidéo, il n'y a aucun exemple de comment obtenir le chemin du fichier en cas de PDF?

Mon code, PAS tout le code mais seulement la partie 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");   
             }               
          }
      }
 }

Certains peuvent-ils m'aider à obtenir le chemin correct à partir de l'URI?

36
Yaqub Ahmad
File myFile = new File(uri.toString());
myFile.getAbsolutePath()

devrait retourner u le bon chemin

MODIFIER

Comme l'a suggéré @Tron, le code de travail est

File myFile = new File(uri.getPath());
myFile.getAbsolutePath()
21
Seshu Vinay

Voici la réponse à la question ici

En fait, nous devons l'obtenir auprès du ContentProvider partageable de l'application Appareil photo.

MODIFIER . Copier la réponse qui a fonctionné pour moi

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;

}

5
sheetal