Problema de orientação da imagem do Android com atividade de câmera personalizada

Escrevi uma atividade de câmera personalizada para lidar com alguns problemas que tenho tido com determinados dispositivos Android ao chamar a captura de imagens intencionais. O usuário pode selecionar salvar imagem ou apenas usar os dados retornados doOnPictureTakenCallback.

O problema que estou tendo é exibir a imagem corretamente com relação à orientação que foi tirada. Eu forço a atividade a ser exibida em retrato chamandoSetRequestedOrientation.

Como eu saberia a orientação correta em que a câmera estava quando o usuário tirou a foto? Ou seja, o usuário pode tirar a foto em uma rotação de 90 (retrato).

Eu tentei usar ogetRotation() na tela padrão do gerenciador de janelas, mas com a configuração da orientação solicitada para retrato que só retornaSurface.ROTATION_0.

Atualização: Para esclarecer minha outra questão, como eu poderia determinar a orientação apenas dobyte[] dados no retorno de imagem, se o usuário não salvar a imagem?

Update: Depois de tentar as respostas abaixo com este código, tudo o que estou recebendo é ExifInterface.ORIENTATION_NORMAL. Eu também mudei meu código para salvar o arquivo retornado da câmera, pois não tenho certeza se existe uma maneira fácil de determinar a orientação com apenasbyte[] dados.

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