一个android文件的Uri地址一般如下: content://media/external/images/media/62026 这是一张图片的Uri,那么我们如何根据这个Uri获得其在文件系统中的路径呢? 其实很简单,直接上代码: public static String getRealFilePath( final Context context, final Uri uri ) { if ( null == uri ) return null; final String scheme = uri.getScheme(); String data = null; i 在Android开发中,图片文件的路径地址和Uri是两种常见的表示文件的方式。Uri(Uniform Resource Identifier)是一个统一的资源标识符,通常用于在不同应用程序之间共享数据,而路径地址则是文件在文件系统中的具体位置。在某些场景下,我们需要将Uri转换为文件路径,或者相反,将文件路径转换为Uri。以下将详细介绍这两种转换方法。 让我们来看看如何从Uri获取文件路径。Android的Uri通常分为两类:`Content` Uri和`File` Uri。`Content` Uri通常代表存储在外部存储器或数据库中的数据,而`File` Uri则直接指向一个文件系统的路径。 1. **从Uri获取文件路径**: 当Uri的scheme为`null`或`file`时,可以直接通过`getPath()`方法获取文件路径。如果是`Content` Uri,需要使用`ContentResolver`查询对应的`Cursor`,然后通过`Data`列获取文件路径。以下是一个示例函数: ```java public static String getRealFilePath(Context context, Uri uri) { if (uri == null) 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 (cursor != null) { if (cursor.moveToFirst()) { int index = cursor.getColumnIndex(ImageColumns.DATA); if (index > -1) data = cursor.getString(index); } cursor.close(); } } return data; } ``` 2. **从文件路径获取Uri**: 如果我们有一个图片的文件路径,可以先判断其类型是否为图片,然后根据路径创建一个`Uri`对象。对于`Content` Uri,可以使用`MediaStore`中的`EXTERNAL_CONTENT_URI`来构建Uri。以下是一个示例: ```java private Uri filePathToUri(Context context, String path) { if (path != null) { Uri uri = Uri.fromFile(new File(path)); if (uri.getScheme().equals("file") && path.contains("image/")) { ContentResolver cr = context.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); return uri_temp; } } return uri; } return null; } ``` 在实际应用中,需要注意权限问题。自Android 6.0(API级别23)起,访问外部存储需要动态请求`READ_EXTERNAL_STORAGE`和`WRITE_EXTERNAL_STORAGE`权限。同时,对于`Content` Uri,可能需要权限访问特定的ContentProvider。 Android中图片文件的路径地址和Uri之间的转换是通过检查Uri的scheme、使用ContentResolver查询或直接构造Uri对象来完成的。理解这些转换方法对于在Android应用程序中处理图片和其他文件至关重要。在进行转换时,确保正确处理各种情况,包括文件不存在、Uri无效等,以避免运行时错误。





























- 粉丝: 6
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 单片机温度控制系统设计方案.doc
- 数字技术与网络传播背景下的广告生存形态最新年文档.doc
- 浅析电气工程及其自动化的发展创新.docx
- C5单片机电子台历的设计与制作.ppt
- (源码)基于C语言汇编的EulixOS训练营在线作业.zip
- 套筒零件加工工艺分析研究编程.doc
- 企业IT建设与项目管理思想.docx
- 株洲服装产业物联网项目市场风险识别与衡量.doc
- 电子商务-本科专业审核评估自评分析报告模板.doc
- 信息与通信技术进展:计算理论与实践研讨会
- 全国计算机等级历年考试四级网络工程师过关练习711章.doc
- JSPSmart题库及试卷管理模块的与开发.doc
- 计算机网络技术在电子信息工程中的应用(1).docx
- 计算机网络安全论文(乱凑的).doc
- 我国P2P网络信贷信用风险影响因素分析.docx
- 基于简单神经网络模型实现图片分类的方法



评论0