Android--Uri转实际路径详解
来源:互联网 发布:单片机波形发生器设计 编辑:程序博客网 时间:2024/06/05 19:32
通过Uri得到实际路径,网上方法有很多,但我前几天试了一下,发现返回的值都是null,后来才发现,Uri的格式在Android4.4之后有了很大的改动。
content://media/extenral/images/media/17766(4.4前)
content://com.android.providers.media.documents/document/image:2706(4.4后)
- 4.4之前的方法
4.4之前的方法网上都有很多,大多数都是基于cursor来实现的。这里主要讲4.4之后的。 4.4之后的方法
代码在这里有了,大家可以对照来看。
http://www.2cto.com/kf/201502/376975.html
Uri分为三个部分
content://com.android.providers.media.documents/document/image:2706
scheme:content://
authority: com.android.providers.media.documents
path:document/image:2706所以要得到uri对应的文件路径
1、先找到文件是属于什么类型(通过authority来判断,源码中就根据authority的值来分为external_document,media等),可以通过getAuthority()来得到。
2、解析文件path的结构,这里拿MediaDocument举例
String docId=DocumentContract.getDocumentId(uri);
进入这个函数,发现包含getPathSegments(),这就是将uri中的path解析成多个部分,如document和image:2706,image是类型,2706就是ID啦。
之后当然是判断类型咯,看看是image还是video还是audio,然后生成一个contentUri,这个时候的后面的就代表的是路径而不是id了。
例如,contentUri=content://+authority+/external/image/media
现在已经知道了,uri对应的id是2706,之后怎么得到它的信息呢?对,跟4.4版本之前的一样也是用cursor,所以有:
cursor = context.getContentResolver().query(uri, projection, selection, selectionArgs, null);
这是个比较关键的函数,cursor相当于一个数据库里的光标,ContentResolver是内容解析对象,我们可以把要解析的内容想象成一个数据库,下面讲讲这几个参数的含义: uri,就是contentUri了,包含路径的 projection,官方解释是a list of which columns return,意思就是返回哪些列,源码中是_data,意思就是返回_data列 selection,源码中是_id=? selectionArgs,源码中是2706,即图片id,联合上面的参数就是在数据库寻找_id=2706的数据
好了,我们现在可以看到,返回的cursor,就是指向_id=2706的数据中的_data列的数据,其实这个数据就是我们需要的path了。
下面输出path
int column_index=cursor.getColumnIndex("_data")String data=cursor.getString(column_index)
好了,其实也蛮简单的。。。但是我做了好久哎。。
- Android--Uri转实际路径详解
- Uri 转实际路径Path
- Android URI详解
- android 中的Uri详解
- Android--文件路径和Uri
- android 根据uri获取路径
- android 路径地址与Uri的相互转换 uri转string
- android 路径地址与Uri的相互转换 uri转string
- 【Android】Uri、UriMatcher、ContentUris详解
- Android Uri、UriMatcher、ContentUris详解
- 【Android】Uri、UriMatcher、ContentUris详解
- 【Android】Uri、UriMatcher、ContentUris详解
- 【Android】Uri、UriMatcher、ContentUris详解
- 【Android】Uri、UriMatcher、ContentUris详解
- 【Android】Uri、UriMatcher、ContentUris详解
- 【Android】Uri、UriMatcher、ContentUris详解
- 【Android】Uri、UriMatcher、ContentUris详解
- [Android]Uri、UriMatcher、ContentUris详解
- 【HDU】5309 JRY is Fighting【DP】
- View的setOnClickListener的添加方法
- 程序员都应学习代码编译器知识
- hdoj 1003 N!Again
- Scala练习(八)
- Android--Uri转实际路径详解
- 激励-弱校acm的奋斗史
- 取文件拓展名的多种方法
- 多个目录同步不行,即脚本这样写不得行!
- 内存管理—页式管理/段式管理/段页式管理
- vs2012总是停止工作
- 2015 Multi-University Training Contest 2 1004 Delicious Apples(DP)
- pycurl问题
- Handle机制详解