Проблема ориентации изображения Android с пользовательской активностью камеры

Я написал пользовательскую операцию с камерой для решения некоторых проблем, которые у меня возникали с определенными устройствами Android при вызове намеренного захвата изображения. Пользователь может выбрать сохранить изображение или просто использовать данные, возвращенные изOnPictureTakenCallback.

Проблема, с которой я сталкиваюсь, заключается в правильном отображении изображения относительно ориентации, в которой оно было принято. Я заставляю деятельность отображаться в портрете, вызываяSetRequestedOrientation.

Как я узнаю правильную ориентацию камеры, когда пользователь сделал снимок? пользователь может сделать снимок с поворотом на 90 (портрет).

Я пытался использоватьgetRotation() на дисплее оконного менеджера по умолчанию, но с установкой запрошенной ориентации на портрет, которая только возвращаетSurface.ROTATION_0.

Обновить: Чтобы прояснить мою другую проблему, как я мог определить ориентацию только изbyte[] данные в картинке обратного вызова, если пользователь не сохранить изображение?

Обновление: после попытки ответов ниже с этим кодом все, что я получаю, - это ExifInterface.ORIENTATION_NORMAL. Я также изменил свой код, чтобы просто сохранить файл, возвращенный с камеры, поскольку я не уверен, что существует простой способ определить ориентацию, просто имеяbyte[] данные.

    private PictureCallback mPicture = new PictureCallback() 
    {
        @Override
        public void onPictureTaken(byte[] data, Camera camera) 
        {
            File directory = new File(android.os.Environment.getExternalStoragePublicDirectory(android.os.Environment.DIRECTORY_PICTURES),
                    "MyApp");
            if(!directory.exists())
            {
                if(!directory.mkdirs())
                {
                    Log.d("CAMERA", "Unable to create directory to save photos.");
                    return;
                }
            }
            File file = new File(directory.getPath() + file.separator + "IMG_" + SimpleDateFormat.getDateTimeInstance().toString() + ".jpg");
            FileOutputStream fos = new FileOutputStream(file);
            fos.write(data);
            fos.close();
            ExifInterface exif = new ExifInterface(file.getCanonicalPath());
            int orientation = exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL);
            int rotate = 0;

            switch (orientation) 
            {
                case ExifInterface.ORIENTATION_ROTATE_90:
                   rotate = 90;
                   break; 
                case ExifInterface.ORIENTATION_ROTATE_180:
                   rotate = 180;
                   break;
                case ExifInterface.ORIENTATION_ROTATE_270:
                   rotate = 270;
                   break;
                case default:
                   break;
             }
        }
    };

Ответы на вопрос(4)

Ваш ответ на вопрос