Não sei se é a melhor solução, mas descrevo-a aqui:
Primeiro de tudo, você precisa de um certificado com sua classe O aplicativo do seu aplicativo está no manifesto disso:
<application
android:name=".App"
...
Segundo, na minha classe App, eu fiz assim:
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;
}
}
}
Terceiro, você precisa definir um sinalizador para Mudança de orientação, no meu caso, eu sempre o defino quando a atividade anterior na navegação do aplicativo é chamada, portanto, é só chamar uma vez quando a atividade posterior é criada.
isOrientationChanged = false;
Portanto, toda vez que altero a orientação da minha tela nesse contexto, defino-a sempre que altera essa configuração, verifica se há uma alteração na orientação; nesse caso, valida-a com base no valor desse sinalizador.
Basicamente, eu precisava usá-lo sempre que fazia uma solicitação de atualização assíncrona, que ele chamava a cada momento que mudava de orientação, travando constantemente o aplicativo:
if (!isOrientationChanged) {
presenter.retrieveAddress(this, idClient, TYPE_ADDRESS);
}
Não sei se é a solução mais elegante e bonita, mas pelo menos aqui é funcional :)
Screen.lockOrientation(this)de github.com/delight-im/Android-BaseLib/blob/master/Source/src/im/… para isso. Permite desbloquear o que o manifesto não permite.