Definindo a orientação Android Photo EXIF

Eu escrevi uma atividade do Android que captura uma foto programaticamente. Desejo salvar a imagem como JPEG com os dados de orientação EXIF corretos (assim como o aplicativo nativo da câmera Android faz automaticamente).

Aqui está o método para tirar a foto (removi os blocos try / catch):

private void takePhoto() {

    camera = Camera.open();
    SurfaceTexture dummySurfaceTexture = new SurfaceTexture(0);
    camera.setPreviewTexture(dummySurfaceTexture);
    camera.startPreview();
    camera.takePicture(null, null, jpgCallback);
}

... e o retorno de chamada:

private Camera.PictureCallback jpgCallback = new Camera.PictureCallback() {
    public void onPictureTaken(byte[] data, Camera camera) {

        releaseCamera();
        savePhoto(data);
};

A foto foi tirada corretamente, mas o meu problema é que os dados EXIF mostram que a orientação está definida como "Orientação da imagem: superior, esquerda", independentemente da orientação do dispositivo, de modo que, quando carrego a foto, ela aparece de cabeça para baixo ou girado.

Preciso realmente capturar a orientação do dispositivo manualmente (rolar, pitch, azimute) e escrever a orientação EXIF? Como o aplicativo Câmera grava automaticamente esses dados corretamente? Alguém sabe uma maneira de definir esse atributo corretamente?

EDIT: Não consigo usar a orientação da tela, pois a Atividade está bloqueada no modo retrato.

questionAnswers(2)

yourAnswerToTheQuestion