Android图片Uri到文件路径转换与反之操作详解
在Android开发中,处理文件路径和Uri(统一资源标识符)之间的转换是一项常见的任务,特别是在处理图片、媒体等文件时。Uri是Android系统中用于表示数据来源的一种抽象概念,它包含了文件或数据的访问权限和位置信息。本文主要讲解如何在Android中实现图片文件的路径地址与Uri的相互转换。 首先,让我们理解Uri的基本结构。一个典型的图片Uri通常遵循`content://media/external/images/media/`这样的格式,这里的数字(如62026)代表图片在设备上的唯一标识。当我们获取到这样一个Uri时,我们的目标是将其转化为可以直接访问的本地文件路径。 `getRealFilePath`方法是用于实现这一转换的关键代码。这个方法接收两个参数:`Context context`和`Uri uri`。当接收到Uri时,我们需要检查其`scheme`部分来确定如何进一步处理: 1. 如果Uri的scheme为空或者等于`ContentResolver.SCHEME_FILE`,这通常意味着它是一个可以直接解析为本地路径的文件系统URI,直接获取`uri.getPath()`即可。 2. 否则,如果scheme是`ContentResolver.SCHEME_CONTENT`,这意味着Uri指向的是内容提供者(Content Provider)中的数据。在这种情况下,我们使用`getContentResolver().query()`方法查询该Uri,请求获取`ImageColumns.DATA`列的数据。通过遍历查询结果,找到包含图片实际路径的行,并将其作为`data`返回。 对于从路径地址获取Uri的情况,假设我们有一个包含图片类型(如"image/jpeg")的Intent意图(`intent.getType()`),我们可以检查Uri的scheme是否为`file`,如果是,我们就解码编码过的路径(`uri.getEncodedPath()`),然后使用`Uri.decode(path)`将其还原成原始路径。 Android图片文件路径地址与Uri的转换涉及到对Uri不同部分的理解,包括scheme、provider查询和路径解码等。这些操作在处理文件上传、存储和分享等场景中至关重要,确保了应用程序能够正确地管理和访问用户设备上的图片资源。
![](https://csdnimg.cn/release/download_crawler_static/14883071/bg1.jpg)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://profile-avatar.csdnimg.cn/default.jpg!1)
- 粉丝: 6
- 资源: 945
我的内容管理 收起
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助
![](https://csdnimg.cn/release/wenkucmsfe/public/img/voice.245cc511.png)
会员权益专享
最新资源
- VMP技术解析:Handle块优化与壳模板初始化
- C++ Primer 第四版更新:现代编程风格与标准库
- 计算机系统基础实验:缓冲区溢出攻击(Lab3)
- 中国结算网上业务平台:证券登记操作详解与常见问题
- FPGA驱动的五子棋博弈系统:加速与创新娱乐体验
- 多旋翼飞行器定点位置控制器设计实验
- 基于流量预测与潮汐效应的动态载频优化策略
- SQL练习:查询分析与高级操作
- 海底数据中心散热优化:从MATLAB到动态模拟
- 移动应用作业:MyDiaryBook - Google Material Design 日记APP
- Linux提权技术详解:从内核漏洞到Sudo配置错误
- 93分钟快速入门 LaTeX:从入门到实践
- 5G测试新挑战与罗德与施瓦茨解决方案
- EAS系统性能优化与故障诊断指南
- Java并发编程:JUC核心概念解析与应用
- 数据结构实验报告:基于不同存储结构的线性表和树实现
![](https://img-home.csdnimg.cn/images/20220527035711.png)
![](https://img-home.csdnimg.cn/images/20220527035111.png)
![](https://csdnimg.cn/release/wenkucmsfe/public/img/green-success.6a4acb44.png)