摘要:Android - KitKat 4.4.4 Select Grallery 方向問題
由於在4.4.4的時候,使用回到的Uri去取得方向,是無法取得原始的方向角度,
原因他回來的資料會是另一個Uri,
所以反而得不到角度,回傳都是0,導致顯示時,跟預期不一樣,未取得他的轉向,所以沒有進行轉向輸出,導致輸出變成90度後,未轉90度讓他正常,
因此,要取得他原始的轉向,就需要取得他原始的絕對位置。
網路有提供一個方法如下
http://www.limbaniandroid.com/2014/03/how-to-get-absolute-path-when-select.html#close
取得他的ImageFilePath.java
並且使用以下方法處理
/**
* 處理相簿得到的方向性
* @param path
* @return
*/
public int getPhotoDegree(Context context, Uri photoUri) {
String path = ImageFilePath.getPath(context, photoUri);
int degree = getPhotoDegree(path);
return degree;
}
/**
* 取得照片預設存放角度
*
* @param path
* @return
*/
public int getPhotoDegree(String path) {
// Get orientation (degree) of photo taken by intent Camera.
int degree = 0;
try {
ExifInterface exifInterface = new ExifInterface(path);
switch (exifInterface.getAttributeInt(ExifInterface.TAG_ORIENTATION,
ExifInterface.ORIENTATION_UNDEFINED)) {
case ExifInterface.ORIENTATION_ROTATE_90:
degree = 90;
break;
case ExifInterface.ORIENTATION_ROTATE_180:
degree = 180;
break;
case ExifInterface.ORIENTATION_ROTATE_270:
degree = 270;
break;
default:
degree = 0;
}
} catch (IOException e) {
e.printStackTrace();
}
return degree;
}
就不再使用以下這種方法處理相簿選擇後取得角度的方式。
Cursor cursor = context.getContentResolver().query(photoUri,new String[] { MediaStore.Images.ImageColumns.ORIENTATION }, null, null, null);
if (cursor.getCount() != 1) {
return -1;
}
cursor.moveToFirst();
return cursor.getInt(0);