package de.thedevstack.conversationsplus.utils; import android.annotation.TargetApi; import android.content.ContentResolver; import android.database.Cursor; import android.net.Uri; import android.os.Build; import android.provider.DocumentsContract; import android.provider.MediaStore; import de.thedevstack.conversationsplus.ConversationsPlusApplication; /** * Created by tzur on 30.10.2015. */ public final class FileHelper { /** * taken from: http://stackoverflow.com/a/29164361 * @param uri * @return */ @TargetApi(Build.VERSION_CODES.KITKAT) private static String getRealPathFromUriLollipop(Uri uri) { String path = null; String wholeID = DocumentsContract.getDocumentId(uri); // Split at colon, use second item in the array String id = wholeID.split(":")[1]; String[] column = { MediaStore.Images.Media.DATA }; // where id is equal to String sel = MediaStore.Images.Media._ID + "=?"; Cursor cursor = ConversationsPlusApplication.getInstance().getContentResolver(). query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, column, sel, new String[]{ id }, null); int columnIndex = cursor.getColumnIndex(column[0]); if (cursor.moveToFirst()) { path = cursor.getString(columnIndex); } cursor.close(); return path; } /** * Get the real path from an Uri. * @param uri the uri to convert to the real path * @return the real path or null */ public static String getRealPathFromUri(Uri uri) { String path = null; if (ContentResolver.SCHEME_FILE.equals(uri.getScheme())) { return uri.getPath(); } else if (ContentResolver.SCHEME_CONTENT.equals(uri.getScheme())) { String[] projection = {MediaStore.MediaColumns.DATA}; Cursor metaCursor = ConversationsPlusApplication.getInstance().getContentResolver().query(uri, projection, null, null, null); if (metaCursor != null) { try { if (metaCursor.moveToFirst()) { path = metaCursor.getString(0); } } finally { metaCursor.close(); } } } if (path == null) { path = getRealPathFromUriLollipop(uri); } return path; } private FileHelper() { // Utility class - do not instantiate } }