Get Real Path For Uri Android Get Real Path For Uri Android android android

Get Real Path For Uri Android


Use this code .This is working for all android version.This is tested code.This support all devices

public static String getPathFromUri(final Context context, final Uri uri) {        final boolean isKitKat = Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT;        // DocumentProvider        if (isKitKat && DocumentsContract.isDocumentUri(context, uri)) {            // ExternalStorageProvider            if (isExternalStorageDocument(uri)) {                final String docId = DocumentsContract.getDocumentId(uri);                final String[] split = docId.split(":");                final String type = split[0];                if ("primary".equalsIgnoreCase(type)) {                    return Environment.getExternalStorageDirectory() + "/" + split[1];                }                // TODO handle non-primary volumes            }            // DownloadsProvider            else if (isDownloadsDocument(uri)) {                final String id = DocumentsContract.getDocumentId(uri);                final Uri contentUri = ContentUris.withAppendedId(                        Uri.parse("content://downloads/public_downloads"), Long.valueOf(id));                return getDataColumn(context, contentUri, null, null);            }            // MediaProvider            else if (isMediaDocument(uri)) {                final String docId = DocumentsContract.getDocumentId(uri);                final String[] split = docId.split(":");                final String type = split[0];                Uri contentUri = null;                if ("image".equals(type)) {                    contentUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;                } else if ("video".equals(type)) {                    contentUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;                } else if ("audio".equals(type)) {                    contentUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;                }                final String selection = "_id=?";                final String[] selectionArgs = new String[] {                        split[1]                };                return getDataColumn(context, contentUri, selection, selectionArgs);            }        }        // MediaStore (and general)        else if ("content".equalsIgnoreCase(uri.getScheme())) {            // Return the remote address            if (isGooglePhotosUri(uri))                return uri.getLastPathSegment();            return getDataColumn(context, uri, null, null);        }        // File        else if ("file".equalsIgnoreCase(uri.getScheme())) {            return uri.getPath();        }        return null;    }    public static String getDataColumn(Context context, Uri uri, String selection,                                       String[] selectionArgs) {        Cursor cursor = null;        final String column = "_data";        final String[] projection = {                column        };        try {            cursor = context.getContentResolver().query(uri, projection, selection, selectionArgs,                    null);            if (cursor != null && cursor.moveToFirst()) {                final int index = cursor.getColumnIndexOrThrow(column);                return cursor.getString(index);            }        } finally {            if (cursor != null)                cursor.close();        }        return null;    }    /**     * @param uri The Uri to check.     * @return Whether the Uri authority is ExternalStorageProvider.     */    public static boolean isExternalStorageDocument(Uri uri) {        return "com.android.externalstorage.documents".equals(uri.getAuthority());    }    /**     * @param uri The Uri to check.     * @return Whether the Uri authority is DownloadsProvider.     */    public static boolean isDownloadsDocument(Uri uri) {        return "com.android.providers.downloads.documents".equals(uri.getAuthority());    }    /**     * @param uri The Uri to check.     * @return Whether the Uri authority is MediaProvider.     */    public static boolean isMediaDocument(Uri uri) {        return "com.android.providers.media.documents".equals(uri.getAuthority());    }    /**     * @param uri The Uri to check.     * @return Whether the Uri authority is Google Photos.     */    public static boolean isGooglePhotosUri(Uri uri) {        return "com.google.android.apps.photos.content".equals(uri.getAuthority());}


You can use this code for selected video path.

Uri uri = data.getData();String[] filePathColumn = {MediaStore.Images.Media.DATA};Cursor cursor = getContentResolver().query(uri, filePathColumn, null, null, null); if(cursor.moveToFirst()){   int columnIndex = cursor.getColumnIndex(filePathColumn[0]);   String yourRealPath = cursor.getString(columnIndex);} else {   //boooo, cursor doesn't have rows ...}cursor.close();

you can refer the below link for your help.

Get filename and path from URI from mediastore

Latest with File provider (API 29):

please follow links :

Blogs: https://blogs.datanapps.com/media-pickerGithub : https://github.com/datanapps/MediaPicker

I hope you will success.


In Kotlin by using this function we can get the real path from URI:

here is the code of getRealPathFromURI

fun getRealPathFromURI(context: Context, uri: Uri): String? {    when {        // DocumentProvider        DocumentsContract.isDocumentUri(context, uri) -> {            when {                // ExternalStorageProvider                isExternalStorageDocument(uri) -> {                    val docId = DocumentsContract.getDocumentId(uri)                    val split = docId.split(":").toTypedArray()                    val type = split[0]                    // This is for checking Main Memory                    return if ("primary".equals(type, ignoreCase = true)) {                        if (split.size > 1) {                            Environment.getExternalStorageDirectory().toString() + "/" + split[1]                        } else {                            Environment.getExternalStorageDirectory().toString() + "/"                        }                        // This is for checking SD Card                    } else {                        "storage" + "/" + docId.replace(":", "/")                    }                }                isDownloadsDocument(uri) -> {                    val fileName = getFilePath(context, uri)                    if (fileName != null) {                        return Environment.getExternalStorageDirectory().toString() + "/Download/" + fileName                    }                    var id = DocumentsContract.getDocumentId(uri)                    if (id.startsWith("raw:")) {                        id = id.replaceFirst("raw:".toRegex(), "")                        val file = File(id)                        if (file.exists()) return id                    }                    val contentUri = ContentUris.withAppendedId(Uri.parse("content://downloads/public_downloads"), java.lang.Long.valueOf(id))                    return getDataColumn(context, contentUri, null, null)                }                isMediaDocument(uri) -> {                    val docId = DocumentsContract.getDocumentId(uri)                    val split = docId.split(":").toTypedArray()                    val type = split[0]                    var contentUri: Uri? = null                    when (type) {                        "image" -> {                            contentUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI                        }                        "video" -> {                            contentUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI                        }                        "audio" -> {                            contentUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI                        }                    }                    val selection = "_id=?"                    val selectionArgs = arrayOf(split[1])                    return getDataColumn(context, contentUri, selection, selectionArgs)                }            }        }        "content".equals(uri.scheme, ignoreCase = true) -> {            // Return the remote address            return if (isGooglePhotosUri(uri)) uri.lastPathSegment else getDataColumn(context, uri, null, null)        }        "file".equals(uri.scheme, ignoreCase = true) -> {            return uri.path        }    }    return null}fun getDataColumn(context: Context, uri: Uri?, selection: String?,                  selectionArgs: Array<String>?): String? {    var cursor: Cursor? = null    val column = "_data"    val projection = arrayOf(            column    )    try {        if (uri == null) return null        cursor = context.contentResolver.query(uri, projection, selection, selectionArgs,                null)        if (cursor != null && cursor.moveToFirst()) {            val index = cursor.getColumnIndexOrThrow(column)            return cursor.getString(index)        }    } finally {        cursor?.close()    }    return null}fun getFilePath(context: Context, uri: Uri?): String? {    var cursor: Cursor? = null    val projection = arrayOf(            MediaStore.MediaColumns.DISPLAY_NAME    )    try {        if (uri == null) return null        cursor = context.contentResolver.query(uri, projection, null, null,                null)        if (cursor != null && cursor.moveToFirst()) {            val index = cursor.getColumnIndexOrThrow(MediaStore.MediaColumns.DISPLAY_NAME)            return cursor.getString(index)        }    } finally {        cursor?.close()    }    return null}/** * @param uri The Uri to check. * @return Whether the Uri authority is ExternalStorageProvider. */fun isExternalStorageDocument(uri: Uri): Boolean {    return "com.android.externalstorage.documents" == uri.authority}/** * @param uri The Uri to check. * @return Whether the Uri authority is DownloadsProvider. */fun isDownloadsDocument(uri: Uri): Boolean {    return "com.android.providers.downloads.documents" == uri.authority}/** * @param uri The Uri to check. * @return Whether the Uri authority is MediaProvider. */fun isMediaDocument(uri: Uri): Boolean {    return "com.android.providers.media.documents" == uri.authority}/** * @param uri The Uri to check. * @return Whether the Uri authority is Google Photos. */fun isGooglePhotosUri(uri: Uri): Boolean {    return "com.google.android.apps.photos.content" == uri.authority}

Get the real path bypassing URI to getRealPathFromURI function in your activity or fragment:

val fileRealPath = getRealPathFromURI(context!!, fileURI) ?: ""