Problem z orientacją obrazu systemu Android w przypadku niestandardowej aktywności aparatu

Napisałem niestandardową aktywność aparatu, aby poradzić sobie z niektórymi problemami, które miałem z niektórymi urządzeniami z Androidem podczas wywoływania umyślnego przechwytywania obrazu. Użytkownik może wybrać albo zapisać obraz, albo po prostu użyć danych zwróconych zOnPictureTakenCallback.

Problem, który mam, to poprawne wyświetlanie obrazu w odniesieniu do orientacji, w jakiej zostało zrobione. Wymuszam wyświetlanie aktywności w portrecie przez wywołanieSetRequestedOrientation.

Skąd mam wiedzieć, jaka jest prawidłowa orientacja aparatu, gdy użytkownik zrobił zdjęcie? tj. użytkownik może zrobić zdjęcie z rotacją 90 (portret).

Próbowałem użyćgetRotation() na domyślnym ekranie menedżera okien, ale z ustawieniem żądanej orientacji na portret, który tylko powracaSurface.ROTATION_0.

Aktualizacja: Aby wyjaśnić moją inną kwestię, jak mogę określić orientację tylko zbyte[] dane w wywołaniu zwrotnym obrazu, jeśli użytkownik nie miał zapisać obrazu?

Aktualizacja: Po wypróbowaniu poniższych odpowiedzi z tym kodem otrzymuję tylko ExifInterface.ORIENTATION_NORMAL. Zmieniłem też swój kod, aby zapisać plik zwrócony z kamery, ponieważ nie jestem pewien, czy istnieje łatwy sposób określenia orientacji po prostu mającbyte[] dane.

    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;
             }
        }
    };

questionAnswers(4)

yourAnswerToTheQuestion