2015年8月12日星期三

获取 本地图片 路径

android 4.4之前可以用这种方法获取图片的绝对路径
[java] view plaincopy
  1. String[] proj = { MediaStore.Images.Media.DATA };  
  2.     cursor = activity.managedQuery(uri, proj, nullnullnull);  
  3.     column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);  
  4.     cursor.moveToFirst();  
  5. catch (Exception e) {  
  6.     return null;  
  7. }  
  8. if (column_index == -1) {  
  9.     return null;  
  10. }  
  11. String path = cursor.getString(column_index);  
但是android4.4之后,用这种方法获取到到path为null。
这时候就需要根据系统版本来使用不同方法处理了。

Android系统中可以通过如下方法判断版本:
[java] view plaincopy
  1. Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT  

所以,我们正确的获取选择选择图片的绝对路径的方法应该这样写:
[java] view plaincopy
  1. import android.content.Context;  
  2. import android.database.Cursor;  
  3. import android.net.Uri;  
  4. import android.os.Build;  
  5. import android.provider.DocumentsContract;  
  6. import android.provider.MediaStore;  
  7. import android.util.Log;  
  8.   
  9. /** 
  10.  * Created by nicholas on 1/18/15. 
  11.  */  
  12. public class FileUtil {  
  13.   
  14.     Uri contentUri;  
  15.   
  16.     boolean isKitKat = Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT;  
  17.   
  18.     public FileUtil() {  
  19.   
  20.     }  
  21.   
  22.     public void setContentUri(Uri uri) {  
  23.         this.contentUri = uri;  
  24.     }  
  25.   
  26.     public Uri getContentUri() {  
  27.         return contentUri;  
  28.     }  
  29.   
  30.     public String getPath(Context context, Uri uri) {  
  31.         Log.v(" File -",  
  32.                 "Authority: " + uri.getAuthority() +  
  33.                         ", Fragment: " + uri.getFragment() +  
  34.                         ", Port: " + uri.getPort() +  
  35.                         ", Query: " + uri.getQuery() +  
  36.                         ", Scheme: " + uri.getScheme() +  
  37.                         ", Host: " + uri.getHost() +  
  38.                         ", Segments: " + uri.getPathSegments().toString()  
  39.         );  
  40.   
  41.         if (isKitKat && DocumentsContract.isDocumentUri(context, uri)) {  
  42.             return getRealPathFromUriKitKatPlus(context, uri);  
  43.         } else {  
  44.             return getRealPathFromUriMinusKitKat(context, uri);  
  45.         }  
  46.     }  
  47.   
  48.   
  49.   
  50.     private String getRealPathFromUriKitKatPlus(Context context, Uri uri) {  
  51.         Cursor cursor = null;  
  52.         String wholeId = DocumentsContract.getDocumentId(uri);  
  53.         String id = wholeId.split(":")[1];  
  54.   
  55.         try {  
  56.             String proj[] = {MediaStore.Images.Media.DATA};  
  57.             String sel = MediaStore.Images.Media._ID + "=?";  
  58.             cursor = context.getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,  
  59.                     proj, sel, new String[]{id}, null);  
  60.             int column_index = cursor.getColumnIndexOrThrow(proj[0]);  
  61.             String filePath = "";  
  62.             if (cursor.moveToFirst()){  
  63.                 filePath = cursor.getString(column_index);  
  64.             }  
  65.             cursor.close();  
  66.             return filePath;  
  67.         } catch (Exception e) {  
  68.             e.printStackTrace();  
  69.             return "";  
  70.         }  
  71.   
  72.     }  
  73.   
  74.     private String getRealPathFromUriMinusKitKat(Context context, Uri uri) {  
  75.         String[] filePathColumn = {MediaStore.Images.Media.DATA};  
  76.         Cursor cursor = context.getContentResolver().query(uri, filePathColumn, nullnullnull);  
  77.         cursor.moveToFirst();  
  78.         int columnIndex = cursor.getColumnIndex(filePathColumn[0]);  
  79.         String picturePath = cursor.getString(columnIndex);  
  80.         cursor.close();  
  81.         System.out.println(picturePath);  
  82.         return picturePath;  
  83.     }  
  84. }  

没有评论:

发表评论