android图片文件的路径地址与Uri的相互转换

来源:互联网 发布:淘宝客推广到哪里 编辑:程序博客网 时间:2024/05/25 23:57

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

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

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
/**
 * 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 ) returnnull;
    final String scheme = uri.getScheme();
    String data = null;
    if( scheme == null)
        data = uri.getPath();
    elseif( ContentResolver.SCHEME_FILE.equals( scheme ) ) {
        data = uri.getPath();
    }elseif( ContentResolver.SCHEME_CONTENT.equals( scheme ) ) {
        Cursor cursor = context.getContentResolver().query( uri, newString[] { 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();
        }
    }
    returndata;
}

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
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 = newStringBuffer();
        buff.append("(")
                .append(Images.ImageColumns.DATA)
                .append("=")
                .append("'"+ path + "'")
                .append(")");
        Cursor cur = cr.query(
                Images.Media.EXTERNAL_CONTENT_URI,
                newString[] { 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;
            }
        }
    }
}


0 0
原创粉丝点击