Get filename and path from URI from mediastore Get filename and path from URI from mediastore android android

Get filename and path from URI from mediastore


Below API 19 use this code to get File Path from URI:

public String getRealPathFromURI(Context context, Uri contentUri) {  Cursor cursor = null;  try {     String[] proj = { MediaStore.Images.Media.DATA };    cursor = context.getContentResolver().query(contentUri,  proj, null, null, null);    int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);    cursor.moveToFirst();    return cursor.getString(column_index);  } finally {    if (cursor != null) {      cursor.close();    }  }}


Just a simple update on the first answer: mActivity.managedQuery() is now deprecated. I've updated the code with the new method.

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;}

android dev source


For Oreo

Uri uri = data.getData(); File file = new File(uri.getPath());//create path from urifinal String[] split = file.getPath().split(":");//split the path.filePath = split[1];//assign it to a string(your choice).

For All version below Oreo I have made this method which get real path from uri

 @SuppressLint("NewApi")    public static String getFilePath(Context context, Uri uri) throws URISyntaxException {        String selection = null;        String[] selectionArgs = null;        // Uri is different in versions after KITKAT (Android 4.4), we need to        if (Build.VERSION.SDK_INT >= 19 && DocumentsContract.isDocumentUri(context.getApplicationContext(), uri)) {            if (isExternalStorageDocument(uri)) {                final String docId = DocumentsContract.getDocumentId(uri);                final String[] split = docId.split(":");                return Environment.getExternalStorageDirectory() + "/" + split[1];            } else if (isDownloadsDocument(uri)) {                final String id = DocumentsContract.getDocumentId(uri);                uri = ContentUris.withAppendedId(                        Uri.parse("content://downloads/public_downloads"), Long.valueOf(id));            } else if (isMediaDocument(uri)) {                final String docId = DocumentsContract.getDocumentId(uri);                final String[] split = docId.split(":");                final String type = split[0];                if ("image".equals(type)) {                    uri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;                } else if ("video".equals(type)) {                    uri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;                } else if ("audio".equals(type)) {                    uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;                }                selection = "_id=?";                selectionArgs = new String[]{                        split[1]                };            }        }        if ("content".equalsIgnoreCase(uri.getScheme())) {          if (isGooglePhotosUri(uri)) {              return uri.getLastPathSegment();           }            String[] projection = {                    MediaStore.Images.Media.DATA            };            Cursor cursor = null;            try {                cursor = context.getContentResolver()                        .query(uri, projection, selection, selectionArgs, null);                int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);                if (cursor.moveToFirst()) {                    return cursor.getString(column_index);                }            } catch (Exception e) {                e.printStackTrace();            }        } else if ("file".equalsIgnoreCase(uri.getScheme())) {            return uri.getPath();        }        return null;    }    public static boolean isExternalStorageDocument(Uri uri) {        return "com.android.externalstorage.documents".equals(uri.getAuthority());    }    public static boolean isDownloadsDocument(Uri uri) {        return "com.android.providers.downloads.documents".equals(uri.getAuthority());    }    public static boolean isMediaDocument(Uri uri) {        return "com.android.providers.media.documents".equals(uri.getAuthority());    }  public static boolean isGooglePhotosUri(Uri uri) {    return "com.google.android.apps.photos.content".equals(uri.getAuthority());}