Configuración de la orientación EXIF de Android Photo

He escrito una actividad de Android que captura una foto mediante programación. Quiero guardar la imagen como JPEG con los datos de orientación EXIF correctos (al igual que la aplicación de cámara nativa de Android lo hace automáticamente).

Aquí está el método para tomar la foto (eliminé los bloques try / catch):

private void takePhoto() {

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

... y la devolución de llamada:

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

        releaseCamera();
        savePhoto(data);
};

La foto se tomó correctamente, pero mi problema es que los datos EXIF muestran que la orientación está configurada en "Orientación de la imagen: superior, izquierda", independientemente de la orientación del dispositivo, de modo que cuando subo la foto aparece al revés o rotado

¿Realmente necesito capturar la orientación del dispositivo manualmente (roll, pitch, azimuth) y escribir la orientación EXIF yo mismo? ¿Cómo la aplicación de la cámara escribe automáticamente estos datos correctamente? ¿Alguien sabe de una manera de configurar este atributo correctamente?

EDITAR: No puedo usar la orientación de la pantalla ya que la Actividad está bloqueada en modo vertical.

Respuestas a la pregunta(2)

Su respuesta a la pregunta