मैं नहीं जानता कि क्या एक सबसे अच्छा समाधान है, लेकिन मैं इसे यहाँ वर्णन:
सबसे पहले, आपको आपके साथ प्रमाणपत्र की आवश्यकता है, आपके एप्लिकेशन का वर्ग इस के अपने प्रकटन में है:
<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)से कॉल करें। यह अनलॉक करने की अनुमति देता है जो प्रकट नहीं होता है।