1. sdk4.4之前的版本
uri:content://media/external/images/media/33581
path:/storage/sdcard0/Pictures/media/xxx.jpg
4.4之后uri变为 content://com.android.providers.media.documents/document/image:33581
2.如下方式打开相册
intent.setAction(Intent.ACTION_GET_CONTENT);
intent.setAction(Intent.ACTION_OPEN_DOCUMENT);(4.4+)
intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "image/*"); 则
public static String getImagePath(Uri uri, Context context) {
String[] column = { MediaStore.Images.Media.DATA };
if (null == uri) {
return null;
}
final String scheme = uri.getScheme();
String path = null;
if (scheme == null)
path = uri.getPath();
else if (ContentResolver.SCHEME_FILE.equals(scheme)) {
path = uri.getPath();
} else if (ContentResolver.SCHEME_CONTENT.equals(scheme)) {
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT) {
String wholeID = DocumentsContract.getDocumentId(uri);
String id = wholeID.split(":")[1];
String sel = MediaStore.Images.Media._ID + "=?";
Cursor cursor = context.getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, column,
sel, new String[] { id }, null);
int columnIndex = cursor.getColumnIndex(column[0]);
if (cursor.moveToFirst()) {
path = cursor.getString(columnIndex);
}
cursor.close();
} else {
Cursor cursor = context.getContentResolver().query(uri, column, null, null, null);
if (null != cursor) {
if (cursor.moveToFirst()) {
int index = cursor.getColumnIndex(MediaStore.Images.Media.DATA);
if (index > -1) {
path = cursor.getString(index);
}
}
cursor.close();
}
}
}
return path;
}
3.若是以下方式打开相册
intent.setAction(Intent.ACTION_PICK);
intent.setData(MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
则不需要判断sdk版本,通用