No sé si es la mejor solución, pero lo describo aquí:
En primer lugar, necesita un certificado con su clase. La aplicación de su aplicación está en su manifiesto de esto:
<application
android:name=".App"
...
En segundo lugar, en la aplicación de mi clase me gustó esto:
public class App extends Application {
public static boolean isOrientationChanged = false;
@Override
public void onCreate() {
super.onCreate();
}
@Override
public void onConfigurationChanged(@NotNull Configuration newConfig) {
super.onConfigurationChanged(newConfig);
if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE ||
newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) {
isOrientationChanged = true;
}
}
}
En tercer lugar, debe establecer un indicador en Cambio de orientación, en mi caso, siempre lo configuro cuando se llama a la actividad anterior dentro de la navegación de la aplicación, por lo que solo se llama una vez cuando se crea la actividad posterior.
isOrientationChanged = false;
Entonces, cada vez que cambio la orientación de mi pantalla en ese contexto, la configuro cada vez que cambia esta configuración, comprueba si hay un cambio en la orientación, de ser así, la valida en función del valor de esa bandera.
Básicamente, tenía que usarlo cada vez que realizaba una solicitud de modificación asincrónica, a la que llamaba cada momento que cambiaba de orientación, bloqueando constantemente la aplicación:
if (!isOrientationChanged) {
presenter.retrieveAddress(this, idClient, TYPE_ADDRESS);
}
No sé si es la solución más elegante y hermosa, pero al menos aquí es funcional :)
Screen.lockOrientation(this)desde github.com/delight-im/Android-BaseLib/blob/master/Source/src/im/… para esto. Permite desbloquear lo que no hace el manifiesto.