通过URI返回File文件

 1    /** 
 2      * 通过Uri返回File文件 
 3      * 注意:通过相机的是类似content://media/external/images/media/97596 
 4      * 通过相册选择的:file:///storage/sdcard0/DCIM/Camera/IMG_20150423_161955.jpg 
 5      * 通过查询获取实际的地址 
 6      * @param uri 
 7      * @return 
 8      */  
 9     public File getFileByUri(Uri uri) {  
10         String path = null;  
11         if ("file".equals(uri.getScheme())) {  
12             path = uri.getEncodedPath();  
13             if (path != null) {  
14                 path = Uri.decode(path);  
15                 ContentResolver cr = activity.getContentResolver();  
16                 StringBuffer buff = new StringBuffer();  
17                 buff.append("(").append(Images.ImageColumns.DATA).append("=").append("'" + path + "'").append(")");  
18                 Cursor cur = cr.query(Images.Media.EXTERNAL_CONTENT_URI, new String[] { Images.ImageColumns._ID, Images.ImageColumns.DATA }, buff.toString(), null, null);  
19                 int index = 0;  
20                 int dataIdx = 0;  
21                 for (cur.moveToFirst(); !cur.isAfterLast(); cur.moveToNext()) {  
22                     index = cur.getColumnIndex(Images.ImageColumns._ID);  
23                     index = cur.getInt(index);  
24                     dataIdx = cur.getColumnIndex(Images.ImageColumns.DATA);  
25                     path = cur.getString(dataIdx);  
26                 }  
27                 cur.close();  
28                 if (index == 0) {  
29                 } else {  
30                     Uri u = Uri.parse("content://media/external/images/media/" + index);  
31                     System.out.println("temp uri is :" + u);  
32                 }  
33             }  
34             if (path != null) {  
35                 return new File(path);  
36             }  
37         } else if ("content".equals(uri.getScheme())) {  
38             // 4.2.2以后  
39             String[] proj = { MediaStore.Images.Media.DATA };  
40             Cursor cursor = activity.getContentResolver().query(uri, proj, null, null, null);  
41             if (cursor.moveToFirst()) {  
42                 int columnIndex = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);  
43                 path = cursor.getString(columnIndex);  
44             }  
45             cursor.close();  
46   
47             return new File(path);  
48         } else {  
49             Log.i(TAG, "Uri Scheme:" + uri.getScheme());  
50         }  
51         return null;  
52     }  
原文地址:https://www.cnblogs.com/Sharley/p/8602735.html