¿Cómo alternar el bloqueo de orientación en Android?

Deseo crear una casilla de verificación en mi Actividad preferida que permita al usuario alternar el cambio de orientación.

En preguntas similares, las personas escriben solo sobre el bloqueo de orientación completo (anulando el método onConfigurationChanged o agregando configChanges en AndroidManifest.xml) o la aplicación de orientación (por setRequestedOrientation).

¿Hay alguna manera de alternar el bloqueo de orientación?

EDITAR: he creado un método que establece la orientación preferida a uno de tres estados: paisaje, retrato y sensor. Este método se usa junto con la orientación de recuperacióngetResources().getConfiguration().orientation) y guardar la orientación recuperada en preferencias. Luego, en la actividad que necesita bloquear la orientación, disparo este método con la orientación preferida de las preferencias.

private static void setActivityOrientation(Activity activity, int preferenceOrientation) {
    if (preferenceOrientation == Configuration.ORIENTATION_LANDSCAPE) { 
        if( activity.getRequestedOrientation() != ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE){ 
        // You need to check if your desired orientation isn't already set because setting orientation restarts your Activity which takes long
            activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
        }
    } else if (preferenceOrientation == Configuration.ORIENTATION_PORTRAIT) {
        if( activity.getRequestedOrientation() != ActivityInfo.SCREEN_ORIENTATION_PORTRAIT){
            activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
        }    
    } else {
        if( activity.getRequestedOrientation() != ActivityInfo.SCREEN_ORIENTATION_SENSOR){
            activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);
        }
    }
}

Respuestas a la pregunta(1)

Su respuesta a la pregunta