老马的技术博客
android系统通过图片绝对路径获取URI的三种方法
最近做项目要通过图片的绝对路径找到图片的URI,然后删除图片,小小总结一下获取URI的方法,亲自试验在
android4.1.3的系统上都是可用的。
1.将所有的图片路径取出,遍历比较找到需要的路径,取出URI,效率较低
其中MediaStore.MediaColumns.DATA字段存的就是图片的绝对路径,
最后mImageUri得到的就是图片的URI
1UrimUri=Uri.parse("content://media/external/images/media");
2UrimImageUri=null;
3Cursorcursor=managedQuery(
4MediaStore.Images.Media.EXTERNAL_CONTENT_URI,null,null,null,
5MediaStore.Images.Media.DEFAULT_SORT_ORDER);
6cursor.moveToFirst();
7
8while(!cursor.isAfterLast()){
9Stringdata=cursor.getString(cursor
10.getColumnIndex(MediaStore.MediaColumns.DATA));
11if(picPath.equals(data)){
12intringtoneID=cursor.getInt(cursor
13.getColumnIndex(MediaStore.MediaColumns._ID));
14mImageUri=Uri.withAppendedPath(mUri,""+ringtoneID);
15break;
16}
17cursor.moveToNext();
18}
2.直接从媒体数据库根据字段取出相应的记录,效率较高
1//TYLT:addbyduanyf1027start
2Stringtype=Utils.ensureNotNull(intent.getType());
3Log.d(TAG,"uriis"+uri);
4if(uri.getScheme().equals("file")&&(type.contains("image/"))){
5Stringpath=uri.getEncodedPath();
6Log.d(TAG,"path1is"+path);
7if(path!=null){
8path=Uri.decode(path);
9Log.d(TAG,"path2is"+path);
10ContentResolvercr=this.getContentResolver();
11StringBufferbuff=newStringBuffer();
12buff.append("(")
13.append(Images.ImageColumns.DATA)
14.append("=")
15.append("'"+path+"'")
16.append(")");
17Cursorcur=cr.query(
18Images.Media.EXTERNAL_CONTENT_URI,
19newString[]{Images.ImageColumns._ID},
20buff.toString(),null,null);
21intindex=0;
22for(cur.moveToFirst();!cur.isAfterLast();cur
23.moveToNext()){
24index=cur.getColumnIndex(Images.ImageColumns._ID);
25//set_idvalue
26index=cur.getInt(index);
27}
28if(index==0){
29//donothing
30}else{
31Uriuri_temp=Uri
32.parse("content://media/external/images/media/"
33+index);
34Log.d(TAG,"uri_tempis"+uri_temp);
35if(uri_temp!=null){
36uri=uri_temp;
37}
38}
39}
40}
41//TYLT:addbyduanyf1027end
3.直接根据路径通过ContentProvider的delete()方法删除图片,两行代码搞定,效率最高
1Stringparams[]=newString[]{filepath};
2ctx.getContentResolver().delete(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,MediaStore.Images.Media.DATA+"LIKE?",params);
PS:通过URI删除图片可以删除媒体库的信息和缩略图一并删除,不留痕迹,如果直接通过路径删除文件会删除不干净