zoukankan      html  css  js  c++  java
  • android图片文件的路径地址与Uri的相互转换

    一个android文件的Uri地址一般如下:

    content://media/external/images/media/62026

    这是一张图片的Uri,那么我们如何根据这个Uri获得其在文件系统中的路径呢?

    其实很简单,直接上代码:

    /**
     * Try to return the absolute file path from the given Uri
     *
     * @param context
     * @param uri
     * @return the file path or null
     */
    public static String getRealFilePath( final Context context, final Uri uri ) {
        if ( null == uri ) return null;
        final String scheme = uri.getScheme();
        String data = null;
        if ( scheme == null )
            data = uri.getPath();
        else if ( ContentResolver.SCHEME_FILE.equals( scheme ) ) {
            data = uri.getPath();
        } else if ( ContentResolver.SCHEME_CONTENT.equals( scheme ) ) {
            Cursor cursor = context.getContentResolver().query( uri, new String[] { ImageColumns.DATA }, null, null, null );
            if ( null != cursor ) {
                if ( cursor.moveToFirst() ) {
                    int index = cursor.getColumnIndex( ImageColumns.DATA );
                    if ( index > -1 ) {
                        data = cursor.getString( index );
                    }
                }
                cursor.close();
            }
        }
        return data;
    }

    那么假如我们有一个图片的路径地址又该如何获得其Uri呢?

        String type = Utils.ensureNotNull(intent.getType());
                    Log.d(TAG, "uri is " + uri);
                    if (uri.getScheme().equals("file") && (type.contains("image/"))) {
                        String path = uri.getEncodedPath();
                        Log.d(TAG, "path1 is " + path);
                        if (path != null) {
                            path = Uri.decode(path);
                            Log.d(TAG, "path2 is " + path);
                            ContentResolver cr = this.getContentResolver();
                            StringBuffer buff = new StringBuffer();
                            buff.append("(")
                                    .append(Images.ImageColumns.DATA)
                                    .append("=")
                                    .append("'" + path + "'")
                                    .append(")");
                            Cursor cur = cr.query(
                                    Images.Media.EXTERNAL_CONTENT_URI,
                                    new String[] { Images.ImageColumns._ID },
                                    buff.toString(), null, null);
                            int index = 0;
                            for (cur.moveToFirst(); !cur.isAfterLast(); cur
                                    .moveToNext()) {
                                index = cur.getColumnIndex(Images.ImageColumns._ID);
                                // set _id value
                                index = cur.getInt(index);
                            }
                            if (index == 0) {
                                //do nothing
                            } else {
                                Uri uri_temp = Uri
                                        .parse("content://media/external/images/media/"
                                                + index);
                                Log.d(TAG, "uri_temp is " + uri_temp);
                                if (uri_temp != null) {
                                    uri = uri_temp;
                                }
                            }
                        }
                    }
                       
  • 相关阅读:
    JAVA 多线程开篇 -从按顺序打印ABC开始
    学英语
    称砝码
    JAVA BST的实现
    JAVA 引用
    常用查找算法的总结
    bootstrap学习之二-组件
    bootstrap学习之一_bootstrap css
    前端学习——css实用技术
    前端学习——css基础知识,选择器与html模板、值得收藏的html标签
  • 原文地址:https://www.cnblogs.com/zhujiabin/p/6692833.html
Copyright © 2011-2022 走看看