9

how can I get the actual file path on the SD card where a content:// uri is pointing for an image?

hunterp
  • 15,716
  • 18
  • 63
  • 115
  • 1
    This Question has been already asked. http://stackoverflow.com/questions/3401579/get-filename-and-path-from-uri-from-mediastore – Shahzad Imam Jan 25 '12 at 12:32
  • Checkout this answer for your problem : http://stackoverflow.com/questions/19985286/convert-content-uri-to-actual-path-in-android-4-4/43679934#43679934 – A-Droid Tech Apr 28 '17 at 12:15

2 Answers2

13

I've adapted the code which @hooked82 linked to:

protected String convertMediaUriToPath(Uri uri) {
    String [] proj={MediaStore.Images.Media.DATA};
    Cursor cursor = getContentResolver().query(uri, proj,  null, null, null);
    int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
    cursor.moveToFirst();
    String path = cursor.getString(column_index); 
    cursor.close();
    return path;
}
Jonathon Horsman
  • 2,303
  • 1
  • 20
  • 18
0

Content URIs have syntax content://authority/path/id, read here. Parse id from content URI and query MediaStore.Images.Media.EXTERNAL_CONTENT_URI as follows:

long id = ContentUris.parseId(Uri.parse(contentUri));
Cursor cursor = getContentResolver()
            .query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
                    new String[]{ MediaStore.Images.Media.DATA },
                    MediaStore.Images.Media._ID + " = ?", new String[]{ Long.toString(id) }, 
                    null);
if (cursor.moveToNext()) {
    path = cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media.DATA));
}
cursor.close();
Darshan Dorai
  • 659
  • 8
  • 10