Ich weiß nicht, ob die beste Lösung ist, aber ich beschreibe sie hier:
Zuallererst benötigen Sie ein Zertifikat mit Ihrer Klasse. Die Anwendung Ihrer App ist in Ihrem Manifest davon:
<application
android:name=".App"
...
Zweitens hat mir in meiner Klassen-App Folgendes gefallen:
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;
}
}
}
Drittens müssen Sie ein Flag auf Orientierungsänderung setzen. In meinem Fall setze ich es immer, wenn die vorherige Aktivität in der App-Navigation aufgerufen wird. Rufen Sie also nur einmal auf, wenn die spätere Aktivität erstellt wird.
isOrientationChanged = false;
Jedes Mal, wenn ich die Ausrichtung meines Bildschirms in diesem Kontext ändere, setze ich sie jedes Mal, wenn ich diese Einstellung ändere. Sie prüft, ob sich die Ausrichtung ändert. Wenn ja, wird sie anhand des Werts dieses Flags überprüft.
Grundsätzlich musste ich es verwenden, wenn ich eine asynchrone Nachrüstanforderung stellte, die er jeden Moment aufrief, der die Ausrichtung änderte und die Anwendung ständig zum Absturz brachte:
if (!isOrientationChanged) {
presenter.retrieveAddress(this, idClient, TYPE_ADDRESS);
}
Ich weiß nicht, ob es die eleganteste und schönste Lösung ist, aber zumindest hier ist es funktional :)
Screen.lockOrientation(this)unter github.com/delight-im/Android-BaseLib/blob/master/Source/src/im/… an. Es ermöglicht das Entsperren, was das Manifest nicht tut.