Non so se sia la soluzione migliore, ma la descrivo qui:
Prima di tutto, hai bisogno del certificato con la tua classe L'applicazione della tua app è nel tuo manifest di questo:
<application
android:name=".App"
...
Secondo, nella mia App di classe mi è piaciuto questo:
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;
}
}
}
In terzo luogo, è necessario impostare un flag su Modifica orientamento, nel mio caso, l'ho sempre impostato quando viene chiamata l'attività precedente all'interno della navigazione dell'app, quindi chiamata solo una volta quando viene creata l'attività successiva.
isOrientationChanged = false;
Quindi ogni volta che cambio l'orientamento del mio schermo in quel contesto, lo metto ogni volta che cambia questa impostazione, controlla se c'è un cambiamento nell'orientamento, in tal caso, lo convalida in base al valore di quella bandiera.
Fondamentalmente, ho dovuto usarlo ogni volta che ho fatto una richiesta di retrofit asincrona, che ha chiamato ogni momento che ha cambiato orientamento, bloccando costantemente l'applicazione:
if (!isOrientationChanged) {
presenter.retrieveAddress(this, idClient, TYPE_ADDRESS);
}
Non so se sia la soluzione più elegante e bella, ma almeno qui è funzionale :)
Screen.lockOrientation(this)da github.com/delight-im/Android-BaseLib/blob/master/Source/src/im/… per questo. Permette lo sblocco a cui il manifest non lo fa.