Android图片路径与Uri相互转化

转载地址:http://www.cnblogs.com/zhujiabin/p/6692833.html


一个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;
}


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;
                            }
                        }
                    }
                }





  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android提供了一种用于标识和定位资源的URI(统一资源标识符)路径URI路径是一种表示资源位置的字符串,它可以用于访问和操作各种类型的数据和内容。 在Android开发中,URI路径通常用于访问和操作应用程序内部的各种资源。这些资源可能包括图片、视频、音频、文档等。通过使用URI路径,我们可以轻松地访问这些资源并进行相应的操作。 AndroidURI路径具有以下几个常见的特点: 1. 格式:URI路径由四个部分组成,包括协议、主机、路径和查询参数。例如:content://com.example.app/files/image.jpg。其中,content://是协议,com.example.app是主机,/files/image.jpg是路径。 2. 权限:访问URI路径中的某些资源可能需要特定的权限。例如,访问联系人列表需要READ_CONTACTS权限。在使用URI路径获取资源时,我们需要确保已经获取了相应的权限。 3. 操作:URI路径可以用于各种操作,如读取、写入、删除、查询等。根据具体的使用场景和需求,我们可以使用不同的URI路径来执行相应的操作。 4. 内容提供者:在许多情况下,我们需要通过内容提供者来访问和操作应用程序中的数据。内容提供者是一种用于在应用程序之间共享数据的机制,它通过URI路径提供对数据的访问。 总之,AndroidURI路径是一种用于标识和定位资源的字符串表示形式。通过使用URI路径,我们可以方便地访问和操作应用程序内部的各种资源。同时,我们还需要注意相应的权限和操作方式,以确保能够正确地获取和处理资源。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值