Android - KitKat 4.4.4 Select Grallery 方向問題

摘要: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);