ȸ¿ø°¡ÀԡžÆÀ̵ð/ºñ¹øã±â
ȨÀ¸·Î


Get RealPath from Uri
7³â Àü
public class RealPathUtil {

    public static String getRealPath(Context context, Uri uri) {
        String realPath;
        // SDK < API11
        if (Build.VERSION.SDK_INT < 11) {
            realPath = RealPathUtil.getRealPathFromURI_BelowAPI11(context, uri);
        }

        // SDK >= 11 && SDK < 19
        else if (Build.VERSION.SDK_INT < 19) {
            realPath = RealPathUtil.getRealPathFromURI_API11to18(context, uri);
        }

        // SDK > 19 (Android 4.4)
        else {
            realPath = RealPathUtil.getRealPathFromURI_API19(context, uri);
        }

        return realPath;
    }

    @SuppressLint("NewApi")
    public static String getRealPathFromURI_API19(final Context context, final Uri uri) {

        // check here to KITKAT or new version
        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];
                }
            }
            // 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;
    }

    /**
     * Get the value of the data column for this Uri. This is useful for
     * MediaStore Uris, and other file-based ContentProviders.
     *
     * @param context
     *            The context.
     * @param uri
     *            The Uri to query.
     * @param selection
     *            (Optional) Filter used in the query.
     * @param selectionArgs
     *            (Optional) Selection arguments used in the query.
     * @return The value of the _data column, which is typically a file path.
     */
    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());
    }

    @SuppressLint("NewApi")
    public static String getRealPathFromURI_API11to18(Context context, Uri contentUri) {
        String[] proj = { MediaStore.Images.Media.DATA };
        String result = null;

        CursorLoader cursorLoader = new CursorLoader(
                context,
                contentUri, proj, null, null, null);
        Cursor cursor = cursorLoader.loadInBackground();

        if(cursor != null){
            int column_index =
                    cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
            cursor.moveToFirst();
            result = cursor.getString(column_index);
        }
        return result;
    }

    public static String getRealPathFromURI_BelowAPI11(Context context, Uri contentUri){
        String[] proj = { MediaStore.Images.Media.DATA };
        Cursor 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);
    }
}
Âü°í : http://stackoverflow.com/a/28229595/3534559

ÃßõÃßõ : 275 Ãßõ ¸ñ·Ï
¹øÈ£ Á¦¸ñ
1,256
[ANDROID & PHP] °£´ÜÇÑ ·Î±×ÀÎ ÀÎÁõ
1,255
ÇöÀç½Ã°£ °¡Á®¿À±â
1,254
ÇÑ ¸Þ¼Òµå·Î Spinner ¿©·¯°³ »ç¿ëÇϱâ
1,253
startActivityForResult °ª ÁÖ°í¹Þ±â
1,252
Ä¿½ºÅÒ ´ÙÀ̾ó·Î±× ¸¸µé±â
1,251
Android ÀÇ Storage Path ¹× ÄÚµå ±¸Çö ±â¼ú
1,250
¾Èµå·ÎÀ̵忡¼­ ¶ç¿ï¼ö ÀÖ´Â ¿©·¯°¡Áö ´ÙÀ̾ó·Î±×
1,249
3°¡Áö ¸Þ¼Òµå·Î ³¡³»´Â ¾Èµå·ÎÀÌµå ¸¶½Ã¸á·Î ±ÇÇÑ È¹µæ
1,248
ACTIVITY¿¡¼­ Ȩ ¹öÆ° CATCH ÇÏ´Â ÇÔ¼ö
1,247
ÇöÀç ½ÇÇàÁßÀÎ ACTIVITY¸¦ ¾Ë¾Æ¿À´Â ÇÔ¼ö
1,246
°­Á¦·Î ȨŰ ´­¸°°Í ó·³
1,245
¾Èµå·ÎÀ̵å ÀÎÅÙÆ® / intent
1,244
¸ð¹ÙÀÏ ½º¸¶Æ®Æù Ư¼ö¹®ÀÚ ¸ðÀ½
1,243
Android/iOS UserAgent ±¸ºÐ ¹× ¸ð¹ÙÀÏÀ¥ÆäÀÌÁö¿¡¼­ ¾Û ¼³Ä¡ ¿©ºÎ È®ÀÎ
1,242
Android À¥ ºê¶ó¿ìÀú ¸µÅ©·Î ¾Û ½ÇÇà ¹æ¹ý
1,241
WebView File Upload
Get RealPath from Uri
1,239
android.net.conn.CONNECTIVITY_CHANGE
1,238
Glide ¿¡¼­ Gif ·Îµå°¡ ³Ê¹« ´À·Á¿ä.
1,237
ImageView¸¦ Width ±æÀÌ¿¡ ¸ÂÃç Height Á¶Àý
1,236
³»Àå ½ºÇÇÄ¿·Î ¿¬°á Çϱâ
1,235
Media Player¸¦ ÀÌ¿ëÇÑ À½¾Ç Àç»ý ¾îÇø®ÄÉÀÌ¼Ç ¸¸µé¾îº¸±â
1,234
DataBinding - findViewById ÀÌÁ¦ ¾È³ç~
1,233
[DataBinding] String Format Àû¿ëÇϱâ
1,232
[DataBinding] ImageView src¿¡ ¿¬µ¿ Çϱâ (ÇÔ¼ö ¿¬°á)
1,231
Scheme ¼³Á¤ ½Ã, ¾ÛÀÌ ¾Èº¸ÀÌ´Â Çö»ó
1,230
WebView¿¡¼­ Javascript Alert âÀÌ º¸ÀÌÁö ¾ÊÀ» ¶§
1,229
À¥ºäÈ­¸é¿¡¼­ ÀÓÀÇ µµ¸ÞÀÎÀ» Á¦¿ÜÇÑ »çÀÌÆ®´Â ¿ÜºÎ ºê¶ó¿ìÀú·Î
1,228
android webview url °¡·Îä±â / ³×ÀÌƼºê¿¡¼­ ÀÛ¾÷ | android
1,227
µð¹ÙÀ̽º ºÎÆýà ¾Û ½ÇÇàÇÏ´Â ¹æ¹ý / ÀçºÎÆà ½Ã ¾îÇà ½ÇÇàÇÏ´Â ¹æ¹ý
¸ñ·Ï
¹ÂÁ÷Æ®·ÎÆ® ºÎ»ê±¤¿ª½Ã ºÎ»êÁø±¸ °¡¾ßµ¿ ¤Ó °³ÀÎÁ¤º¸Ãë±Þ¹æħ
Copyright ¨Ï musictrot All rights reserved.