Я не знаю, чи найкраще рішення, але я описую його тут:
Перш за все, вам потрібен сертифікат з вашим класом Застосування вашої програми є в вашому маніфесті цього:
<application
android:name=".App"
...
По-друге, у моєму додатку для класу мені так було:
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;
}
}
}
По-третє, вам потрібно встановити прапор на «Зміни орієнтації», в моєму випадку я завжди встановлюю його, коли викликається попередня активність у межах навігації в додатку, тому дзвоню лише один раз, коли створена пізніша активність.
isOrientationChanged = false;
Отже, кожного разу, коли я змінюю орієнтацію мого екрана в цьому контексті, я встановлюю його кожен раз, коли він змінює це налаштування, він перевіряє, чи є зміна орієнтації, якщо так, він перевіряє його на основі значення цього прапора.
В основному, мені доводилося використовувати його щоразу, коли я робив запит на асинхронну модернізацію, який він викликав кожного моменту, що змінював орієнтацію, постійно вибиваючи програму:
if (!isOrientationChanged) {
presenter.retrieveAddress(this, idClient, TYPE_ADDRESS);
}
Я не знаю, чи це найелегантніше і найкрасивіше рішення, але принаймні тут воно функціональне :)
Screen.lockOrientation(this)з github.com/delight-im/Android-BaseLib/blob/master/Source/src/im / ... для цього. Це дозволяє розблокувати те, що маніфест не робить.