Android उन ऐप्लिकेशन के लिए काम करने वाला मोड चालू करता है जो स्क्रीन की दिशा या साइज़ से जुड़ी पाबंदियों के बारे में जानकारी देते हैं. कम्पैटिबिलिटी मोड, यह पक्का करता है कि ऐप्लिकेशन, बड़ी स्क्रीन वाले डिवाइसों और फ़ोल्ड किए जा सकने वाले फ़्लिप फ़ोन पर सही तरीके से काम करे. हालांकि, इसका इस्तेमाल करना ज़्यादा सही नहीं है.
हर ऐप्लिकेशन के हिसाब से किए जाने वाले बदलाव, डिवाइस बनाने वाली कंपनियों को ऐप्लिकेशन के काम करने के तरीके में बदलाव करने में मदद करते हैं. इससे उपयोगकर्ता अनुभव को बेहतर बनाया जा सकता है या किसी खास डिवाइस पर ऐप्लिकेशन को क्रैश होने से रोका जा सकता है.
रेफ़रंस डिवाइस
इन डिवाइस को अलग-अलग ऐप्लिकेशन के हिसाब से ओवरराइड करने की ज़रूरत पड़ सकती है. ऐसा असामान्य कॉन्फ़िगरेशन या ऐसे कॉन्फ़िगरेशन की वजह से होता है जो ऐप्लिकेशन के साथ ठीक से काम नहीं करते हैं:
- टैबलेट: Pixel Tablet जैसे कुछ टैबलेट की स्क्रीन की दिशा लैंडस्केप होती है. जब
Display#getRotation()
,Surface.ROTATION_0
वापस लौटता है, तो डिवाइस अपने नैचुरल ओरिएंटेशन में होता है. अगर ऐप्लिकेशन यह मानते हैं किROTATION_0
का फ़ॉर्मैट पोर्ट्रेट है, तो ऐप्लिकेशन के लेआउट और कैमरे की झलक, डिवाइस के डिसप्ले से मेल नहीं खा सकती. - लैंडस्केप मोड में काम करने वाले फ़ोल्ड किए जा सकने वाले डिवाइस: Pixel Fold जैसे कुछ फ़ोल्ड किए जा सकने वाले डिवाइस, फ़ोल्ड होने पर पोर्ट्रेट ओरिएंटेशन में होते हैं. हालांकि, अनफ़ोल्ड होने पर ये लैंडस्केप ओरिएंटेशन में काम करते हैं. अगर ऐप्लिकेशन को लगता है कि अनफ़ोल्ड होने वाला ओरिएंटेशन पोर्ट्रेट है, तो फ़्लिकरिंग लूप या लेआउट से जुड़ी समस्याएं हो सकती हैं.
- फ़ोल्ड किए जा सकने वाले फ़्लिप फ़ोन: फ़ोल्ड किए गए फ़्लिप फ़ोन आम तौर पर, पोर्ट्रेट ओरिएंटेशन में होते हैं. हालांकि, फ़ोल्ड होने पर, इन फ़ोन का डिसप्ले आम तौर पर लैंडस्केप ओरिएंटेशन में छोटा हो जाता है. ऐप्लिकेशन को डिसप्ले के अलग-अलग ओरिएंटेशन की पहचान करनी चाहिए और उन पर काम करना चाहिए.
साथ काम करने से जुड़ी आम समस्याएं
ऐप्लिकेशन के साथ काम करने से जुड़ी समस्याओं का अक्सर सामना करना पड़ता है. ऐसा ऐप्लिकेशन ओरिएंटेशन की पाबंदियों, फिर से साइज़ बदलने, और आसपेक्ट रेशियो (लंबाई-चौड़ाई का अनुपात) से जुड़ी पाबंदियों, कैमरा प्रीव्यू के ओरिएंटेशन को गलत तरीके से मैनेज करने, और गलत एपीआई की वजह से होता है.
लेटर बॉक्सिंग
लेटरबॉक्सिंग की सुविधा से, ऐप्लिकेशन को स्क्रीन के बीच में या बड़ी स्क्रीन पर, आसानी से ऐक्सेस करने के लिए एक तरफ़ या दूसरी तरफ़ रखा जाता है. मैट (ठोस रंग के बार या धुंधले वॉलपेपर) की मदद से, ऐप्लिकेशन की स्क्रीन के किनारों, ऊपर और नीचे वाले हिस्से में डिसप्ले एरिया भर जाता है.
लेटरबॉक्स अक्सर बड़ी स्क्रीन वाले डिवाइस पर होता है, क्योंकि डिवाइस के डिसप्ले के डाइमेंशन और आसपेक्ट रेशियो (लंबाई-चौड़ाई का अनुपात) आम तौर पर स्टैंडर्ड फ़ोन के डाइमेंशन और आसपेक्ट रेशियो से अलग होते हैं, जिनके लिए ज़्यादातर ऐप्लिकेशन डिज़ाइन किए गए हैं.
समस्या
ऐप्लिकेशन सभी डिसप्ले कॉन्फ़िगरेशन के साथ काम नहीं करता, क्योंकि ऐप्लिकेशन का ओरिएंटेशन और आसपेक्ट रेशियो तय है या ऐप्लिकेशन का साइज़ बदला नहीं जा सकता.
ऐप्लिकेशन ओरिएंटेशन और साइज़ बदलने की क्षमता को कंट्रोल करने वाली कॉन्फ़िगरेशन सेटिंग में ये शामिल हैं:
screenOrientation
: इससे ऐप्लिकेशन का एक तय ओरिएंटेशन तय होता है.Activity#setRequestedOrientation()
का इस्तेमाल करके, ऐप्लिकेशन रनटाइम के समय भी ओरिएंटेशन सेट कर सकते हैं.resizeableActivity
: इससे पता चलता है कि सिस्टम, अलग-अलग डाइमेंशन वाली विंडो में फ़िट होने के लिए, ऐप्लिकेशन का साइज़ बदल सकता है या नहीं. Android 11 (एपीआई लेवल 30) और इससे पहले के वर्शन पर, यह बताता है कि ऐप्लिकेशन में मल्टी-विंडो मोड काम करता है या नहीं. इससे पता चलता है कि Android 12 (एपीआई लेवल 31) और इसके बाद के वर्शन पर, ऐप्लिकेशन छोटी स्क्रीन (कॉम्पैक्ट विंडो साइज़ क्लास) पर मल्टी-विंडो मोड के साथ काम करते हैं या नहीं. Android 12 और उसके बाद के वर्शन पर, ऐप्लिकेशन बड़ी स्क्रीन (मध्यम या बड़े साइज़ वाली विंडो) पर मल्टी-विंडो मोड में काम करते हैं. भले ही, इस सेटिंग का इस्तेमाल किया जा रहा हो या नहीं.maxAspectRatio
: इससे पता चलता है कि ऐप्लिकेशन में सबसे ज़्यादा कौनसा आसपेक्ट रेशियो इस्तेमाल किया जा सकता है. सिर्फ़ वे ऐप्लिकेशनmaxAspectRatio
सेट कर सकते हैं जिनमेंresizeableActivity
कोfalse
पर सेट किया गया हो.minAspectRatio
: इससे ऐप्लिकेशन के काम करने वाले सबसे कम आसपेक्ट रेशियो (लंबाई-चौड़ाई का अनुपात) की जानकारी मिलती है. सिर्फ़ वे ऐप्लिकेशनminAspectRatio
को सेट कर सकते हैं जिनमेंresizeableActivity
कोfalse
पर सेट किया गया हो.
ऑप्टिमाइज़ेशन
ऐप्लिकेशन सभी डिवाइसों और मल्टी-विंडो मोड के डिसप्ले ओरिएंटेशन और साइज़ के साथ काम करना चाहिए. अपने ऐप्लिकेशन के लेआउट और ऐप्लिकेशन मेनिफ़ेस्ट फ़ाइल से, ओरिएंटेशन और फ़िक्स किए गए आसपेक्ट रेशियो की सभी पाबंदियां हटाएं.
कंपैटिबिलिटी से जुड़ी समस्या हल करने का तरीका
अगर फ़िक्स ओरिएंटेशन या तय आसपेक्ट रेशियो वाला कोई ऐप्लिकेशन ऐसी विंडो में चलता है जिसमें ऐप्लिकेशन सीधे तौर पर विंडो के साइज़ या स्क्रीन की दिशा पर काम नहीं करता है, तो Android ऐप्लिकेशन को लगातार बनाए रखने के लिए लेटरबॉक्स करता है.
यह प्लैटफ़ॉर्म, Android 12 (एपीआई लेवल 31) और 12L (एपीआई लेवल 32) के साथ जारी रहने से, लेटरबॉक्स किए गए ऐप्लिकेशन को कई तरह से बेहतर बनाता है. डिवाइस बनाने वाली कंपनियां, यूज़र इंटरफ़ेस (यूआई) को बेहतर बनाती हैं. इन सुधारों का फ़ायदा पाने के लिए, आपको अपने ऐप्लिकेशन के लिए कोई और डेवलपमेंट करने की ज़रूरत नहीं है.
Android 12 (एपीआई लेवल 31) में ये शानदार बदलाव किए गए हैं, जिन्हें डिवाइस बनाने वाली कंपनियां कॉन्फ़िगर कर सकती हैं:
- गोलाकार कोने: ऐप्लिकेशन की विंडो के कोने ज़्यादा बेहतर दिखते हैं.
- सिस्टम बार की पारदर्शिता: ऐप्लिकेशन को ओवरले करने वाले स्टेटस और नेविगेशन बार, अर्द्ध-पारदर्शी होते हैं. इसकी वजह से, बार के आइकॉन हमेशा लेटरबॉक्स बैकग्राउंड पर दिखते हैं.
- कॉन्फ़िगर किया जा सकने वाला आसपेक्ट रेशियो (लंबाई-चौड़ाई का अनुपात): ऐप्लिकेशन को दिखाने के तरीके को बेहतर बनाने के लिए, उसके आसपेक्ट रेशियो (लंबाई-चौड़ाई का अनुपात) में बदलाव किया जा सकता है.
12L (एपीआई लेवल 32) में ये फ़ंक्शन सुधार किए गए हैं:
कॉन्फ़िगर करने लायक पोज़िशन: बड़ी स्क्रीन पर, डिवाइस बनाने वाली कंपनियां ऐप्लिकेशन को डिसप्ले के बाईं या दाईं ओर रख सकती हैं. इससे, इंटरैक्शन आसान हो जाता है.
डिज़ाइन में बदलाव किया गया रीस्टार्ट बटन: डिवाइस बनाने वाली कंपनियां, साइज़ के हिसाब से काम करने वाले कंपैटबिलिटी मोड के लिए रीस्टार्ट बटन को नया लुक दे सकती हैं, ताकि उपयोगकर्ता उसे आसानी से पहचान सकें.
Android 13 (एपीआई लेवल 33) में, स्क्रीन पर लेटरबॉक्स किए गए ऐप्लिकेशन को पोज़िशन करने या स्प्लिट-स्क्रीन मोड में लेटरबॉक्स को शामिल करने के बारे में उपयोगकर्ता को जानकारी देने वाला डायलॉग बॉक्स जोड़ा गया है:
साइज़ के साथ काम करने वाला मोड
साइज़ के साथ काम करने वाला मोड, लेटरबॉक्स किया गया है. इसमें रीस्टार्ट करने का कंट्रोल शामिल है. इस कंट्रोल की मदद से, उपयोगकर्ता ऐप्लिकेशन को रीस्टार्ट कर सकते हैं और डिसप्ले को फिर से खोल सकते हैं. Android उन ऐप्लिकेशन के लिए साइज़ के साथ काम करने वाले मोड को शुरू करता है जिनका साइज़ नहीं बदला जा सकता. जब कोई गतिविधि किसी ऐसे डिसप्ले कंटेनर में जाती है जो गतिविधि के डाइमेंशन से मेल नहीं खाता, तो सिस्टम डिवाइस के डिसप्ले में कम से कम एक डाइमेंशन भरने के लिए ऐप्लिकेशन का साइज़ बदल सकता है.
डिवाइस कॉन्फ़िगरेशन में ये बदलाव किए जा सकते हैं. इनसे साइज़ के साथ काम करने वाले मोड को ट्रिगर किया जा सकता है:
- डिवाइस को घुमाना
- फ़ोल्ड किए जा सकने वाले डिवाइस को फ़ोल्ड या अनफ़ोल्ड करना
- फ़ुल स्क्रीन मोड और स्प्लिट स्क्रीन मोड के बीच स्विच करना
समस्या
साइज़ के साथ काम करने वाला मोड, आम तौर पर उन गतिविधियों पर लागू होता है जिनके ओरिएंटेशन या आसपेक्ट रेशियो पर पाबंदी लगी होती है. साथ ही, उन्हें कॉन्फ़िगर किया जाता है (या सिस्टम तय करता है) कि उनका साइज़ नहीं बदला जा सकता.
अगर आपका ऐप्लिकेशन इनमें से किसी भी शर्त को पूरा करता है, तो उसे साइज़ के हिसाब से काम करने वाले मोड में नहीं रखा जाएगा. साथ ही, उसे साइज़ में बदला जा सकता है:
resizeableActivity="true"
का इस्तेमाल करके, साइज़ में बदला जा सकता है- पिक्चर में पिक्चर (पीआईपी) मोड का इस्तेमाल किया जा सकता है
- एम्बेड किया गया हो
- इसमें डिवाइस मैन्युफ़ैक्चरर की ओर से हर ऐप्लिकेशन के लिए,
FORCE_RESIZE_APP
ओवरराइड लागू किया गया है (ऐप्लिकेशन से सेट की गई प्रॉपर्टी को अनदेखा किया जाता है)
अगर आपका ऐप्लिकेशन इनमें से किसी भी शर्त को पूरा नहीं करता, तो उसे साइज़ में बदला नहीं जा सकता. साथ ही, उसे साइज़ के हिसाब से काम करने वाले मोड में रखा जा सकता है.
ऑप्टिमाइज़ेशन
ऐप्लिकेशन सभी डिसप्ले साइज़ के साथ काम करना चाहिए. ऐप्लिकेशन मेनिफ़ेस्ट में <activity>
या <application>
एलिमेंट के true
पर सेट करके अपने ऐप्लिकेशन का साइज़ बदलने की सुविधा बनाएं.android:resizeableActivity
अपने ऐप्लिकेशन के लिए रिस्पॉन्सिव/ज़रूरत के मुताबिक लेआउट डिज़ाइन करें. ज़्यादा जानकारी के लिए, अलग-अलग स्क्रीन साइज़ इस्तेमाल करना और मल्टी-विंडो मोड इस्तेमाल करना लेख पढ़ें.
कंपैटिबिलिटी से जुड़ी समस्या हल करने का तरीका
जब सिस्टम यह तय करता है कि लेटरबॉक्स किए गए ऐप्लिकेशन के डिसप्ले में सुधार किया जा सकता है, तो Android उसे साइज़ के साथ काम करने वाले मोड में डाल देता है. ऐसा करने के लिए, ऐप्लिकेशन को फिर से स्केल करें, ताकि वह डिसप्ले विंडो में कम से कम एक डाइमेंशन भर सके. सिस्टम एक रीस्टार्ट कंट्रोल दिखाता है, जो ऐप्लिकेशन की प्रोसेस को फिर से बनाता है. इसके ज़रिए, गतिविधि और डिसप्ले को फिर से बनाया जाता है. प्रोसेस और थ्रेड की खास जानकारी भी देखें.
फ़्लिकरिंग लूप
जब कोई ऐप्लिकेशन सभी डिसप्ले ओरिएंटेशन के साथ काम नहीं करता है, तो कॉन्फ़िगरेशन में बदलाव होने पर, वह बार-बार नए ओरिएंटेशन का अनुरोध कर सकता है. इससे, डिसप्ले फ़्लिकर हो सकता है या ऐप्लिकेशन लगातार रोटेट हो सकता है.
समस्या
Android 12 (एपीआई लेवल 31) और इसके बाद के वर्शन पर, डिवाइस बनाने वाली कंपनियां अपने डिवाइसों को कॉन्फ़िगर कर सकती हैं, ताकि वे ऐप्लिकेशन के तय किए गए ओरिएंटेशन की पाबंदियों को अनदेखा कर सकें. इसके बजाय, वे डिवाइस के साथ काम करने वाले मोड लागू कर सकती हैं. उदाहरण के लिए, जब डिवाइस की इनर स्क्रीन और लैंडस्केप टैबलेट के लिए गतिविधि दिखाई जाती है, तो फ़ोल्ड किया जा सकने वाला डिवाइस, किसी गतिविधि की android:screenOrientation="portrait"
सेटिंग को अनदेखा कर सकता है.
अगर किसी ऐप्लिकेशन के ओरिएंटेशन से जुड़ी पाबंदियों को अनदेखा किया जाता है, तो ऐप्लिकेशन प्रोग्राम के हिसाब से अपना ओरिएंटेशन सेट कर सकता है. इसके लिए, उसे Activity#setRequestedOrientation()
को कॉल करना होगा. कॉल
रिस्टार्ट ऐप्लिकेशन को तब ट्रिगर करता है, जब ऐप्लिकेशन कॉन्फ़िगरेशन में होने वाले बदलावों को हैंडल नहीं कर रहा होता है (कॉन्फ़िगरेशन में होने वाले बदलावों को मैनेज करना देखें). रीस्टार्ट करने के बाद, ऐप्लिकेशन के ओरिएंटेशन से जुड़ी पाबंदियों को फिर से अनदेखा कर दिया जाता है. इसके बाद, ऐप्लिकेशन setRequestedOrientation()
को फिर से कॉल करता है. यह कॉल, ऐप्लिकेशन को रीस्टार्ट करता है. यह सिलसिला, अपने-आप चलता रहता है.
ऐसा तब भी हो सकता है, जब डिवाइस की स्क्रीन का नेचुरल ओरिएंटेशन (Android के हिसाब से सामान्य ओरिएंटेशन) लैंडस्केप हो. इसका मतलब है कि डिवाइस का आसपेक्ट रेशियो लैंडस्केप होने पर, Display#getRotation()
को कॉल करने पर Surface.ROTATION_0
दिखता है. अब तक, ऐप्लिकेशन यह मानते हैं कि Display.getRotation() =
Surface.ROTATION_0
का मतलब डिवाइस पोर्ट्रेट ओरिएंटेशन में है. हालांकि, ऐसा हमेशा नहीं होता है. उदाहरण के लिए, फ़ोल्ड किए जा सकने वाले कुछ डिवाइसों की इनर स्क्रीन और कुछ टैबलेट पर ऐसा हमेशा नहीं होता है.
फ़ोल्ड किए जा सकने वाले इनर डिसप्ले पर लैंडस्केप ओरिएंटेशन में कोई ऐप्लिकेशन, स्क्रीन रोटेशन की जांच कर सकता है, ROTATION_0
की वैल्यू पा सकता है, और यह मान सकता है कि डिवाइस का नैचुरल ओरिएंटेशन
पोर्ट्रेट मोड में है. इसके बाद, उसे फिर से कॉन्फ़िगर करने के लिए, setRequestedOrientation(
ActivityInfo.SCREEN_ORIENTATION_PORTRAIT
)
पर कॉल करें. ऐप्लिकेशन रीस्टार्ट होने पर (लैंडस्केप ओरिएंटेशन में), फिर से स्क्रीन घुमाने की जांच कर सकता है, ROTATION_0
वैल्यू पा सकता है, setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT)
को कॉल कर सकता है, और अनंत लूप को जारी रख सकता है.
ऑप्टिमाइज़ेशन
ऐप्लिकेशन को ये काम नहीं करने चाहिए:
- गतिविधि
onCreate()
तरीके मेंActivity#setRequestedOrientation()
का इस्तेमाल करके डिफ़ॉल्ट ओरिएंटेशन सेट करें, क्योंकि बिना हैंडल किए कॉन्फ़िगरेशन में किए गए बदलावों से, ओरिएंटेशन का अनुरोध अचानक ट्रिगर हो सकता है - मान लें कि डिवाइस (
ROTATION_0
) का नैचुरल ओरिएंटेशन पोर्ट्रेट है - मौजूदा विंडो साइज़ से जुड़े सिग्नल के आधार पर ओरिएंटेशन सेट न करें. जैसे,
Display#getRotation()
,FoldingFeature
या पुराने एपीआई की मौजूदगी.
कंपैटबिलिटी से जुड़े समाधान
Android, इन स्थितियों में Activity#setRequestedOrientation()
को किए जाने वाले कॉल को अनदेखा करता है:
गतिविधि को पिछले कॉल से पहले ही, तरीके को फिर से लॉन्च किया जा चुका है या कैमरा कंपैट फ़ोर्स रोटेशन ट्रीटमेंट चालू किया गया है (नीचे कैमरे की झलक देखें).
डिवाइस बनाने वाली कंपनियां,
OVERRIDE_ENABLE_COMPAT_IGNORE_REQUESTED_ORIENTATION
का इस्तेमाल करके, किसी ऐप्लिकेशन पर यह सुविधा लागू कर सकती हैं.गतिविधि से एक सेकंड में, स्क्रीन की दिशा के दो से ज़्यादा अनुरोध किए गए. इससे पता चलता है कि कोई लूप हुआ है. लूप में चलने वाले दो अनुरोधों में से, Android उस अनुरोध का इस्तेमाल करता है जो ऐप्लिकेशन के डिसप्ले एरिया को बड़ा करता है.
डिवाइस बनाने वाली कंपनियां,
OVERRIDE_ENABLE_COMPAT_IGNORE_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED
से किसी ऐप्लिकेशन पर यह व्यवहार लागू कर सकती हैं.
कैमरे की झलक
टैबलेट, लैपटॉप, और फ़ोल्ड किए जा सकने वाले डिसप्ले पर, कैमरा ऐप्लिकेशन की झलक (या व्यूफ़ाइंडर) का अलाइनमेंट गलत हो सकता है या वह खराब दिख सकता है.
समस्या
Android के साथ काम करने की परिभाषा के दस्तावेज़ में बताया गया है कि "कैमरा इमेज सेंसर की स्क्रीन की दिशा में होना ज़रूरी है, ताकि कैमरे का लंबा डाइमेंशन, स्क्रीन के लंबे डाइमेंशन के साथ अलाइन हो सके."
ऐप्लिकेशन अक्सर यह मान लेते हैं कि डिवाइस ओरिएंटेशन और कैमरा सेंसर ओरिएंटेशन पोर्ट्रेट हैं—यह स्टैंडर्ड मोबाइल फ़ोन के लिए एक सही अनुमान है. हालांकि, टैबलेट और लैपटॉप के कैमरे के सेंसर और उनके ऑरियंटेशन को लैंडस्केप मोड में सेट किया जा सकता है. साथ ही, फ़ोल्ड किए जा सकने वाले डिवाइस जैसे नए नाप या आकार में, कई नैचुरल ओरिएंटेशन (स्क्रीन के वे हिस्से जहां छूने पर कोई कार्रवाई होती है) और कई कैमरा सेंसर हो सकते हैं. ये डिवाइस अलग-अलग ओरिएंटेशन में हो सकते हैं.
अगर ऐप्लिकेशन को अलग-अलग कैमरे या डिवाइस की स्क्रीन (फ़ोल्ड किए जा सकने वाले डिवाइस के लिए) के बीच स्विच या कैमरा ओरिएंटेशन के साथ कोई गतिविधि होती है, तो हो सकता है कि वीडियो की झलक ठीक से न दिखे या वीडियो की झलक बिगड़ जाए.
ऑप्टिमाइज़ेशन
कैमरा ऐप्लिकेशन को डिवाइस ओरिएंटेशन और कैमरा सेंसर ओरिएंटेशन को सही तरीके से पहचानना और मैनेज करना चाहिए. ऐसा करने से, कैमरा ऐप्लिकेशन सही तरीके से अलाइन और स्केल किया गया कैमरा झलक दिखाता है. ऐप्लिकेशन को डिवाइस के रोटेशन, सेंसर के रोटेशन, और स्क्रीन या विंडो के आसपेक्ट रेशियो का हिसाब लगाना होगा. इसके बाद, कैमरे की झलक में नतीजे लागू करने होंगे. ज़्यादा जानकारी के लिए, कैमरे की झलक और पेश है Camera व्यूफ़ाइंडर देखें.
कंपैटिबिलिटी से जुड़ी समस्या हल करने का तरीका
जब Display#getRotation()
के तौर पर Surface.ROTATION_0
दिखता है, तो इसका मतलब है कि डिवाइस नॉर्मल ओरिएंटेशन में है. सिस्टम, डिवाइस के नैचुरल ओरिएंटेशन के हिसाब से CameraCharacteristics.SENSOR_ORIENTATION
का हिसाब लगाता है. Android, सीमित तौर पर दिखाए जाने वाले ऐप्लिकेशन की पोर्ट्रेट विंडो को डिवाइस के नैचुरल ओरिएंटेशन के साथ अलाइन करता है. ज़्यादातर ऐप्लिकेशन इसी ओरिएंटेशन में हैं. सेंसर ओरिएंटेशन के लैंडस्केप होने और कैमरे की झलक पोर्ट्रेट में होने पर, Android कैमरा सेंसर की इमेज
को भी काट देता है. इस समस्या को हल करने के लिए, ये तरीके अपनाए जा सकते हैं:
पोर्ट्रेट मोड में पाबंदी वाले ऐप्लिकेशन के लिए कैमरे की झलक को ज़बरदस्ती घुमाएं: जिन ऐप्लिकेशन के लिए पोर्ट्रेट ओरिएंटेशन की सेटिंग पर पाबंदी लगाई गई है वे डिवाइस के नैचुरल ओरिएंटेशन और कैमरा सेंसर ओरिएंटेशन की पोर्ट्रेट स्थिति में होने की उम्मीद करते हैं. हालांकि, अगर डिवाइस बनाने वाली कंपनियां ओरिएंटेशन की जानकारी को अनदेखा करती हैं, तो Android 12 (एपीआई लेवल 31) और उसके बाद के वर्शन पर, ऐप्लिकेशन कई डिवाइस ओरिएंटेशन में चल सकते हैं.
जब पोर्ट्रेट-पाबंदी वाला कोई ऐप्लिकेशन कैमरे से कनेक्ट होता है, तो Android, ऐप्लिकेशन की पोर्ट्रेट विंडो को डिवाइस के नैचुरल ओरिएंटेशन में सेट करने के लिए उसे ज़बरदस्ती घुमाता है.
कुछ टैबलेट (रेफ़रंस डिवाइस देखें) पर, ऐप्लिकेशन की वर्टिकल विंडो को घुमाकर फ़ुल स्क्रीन वर्टिकल मोड में दिखाया जाता है, ताकि वह डिवाइस के नेचुरल ओरिएंटेशन के हिसाब से अलाइन हो सके. ज़बरदस्ती घुमाने के बाद, ऐप्लिकेशन फ़ुल स्क्रीन पर दिखता है.
फ़ोल्ड किए जा सकने वाले डिवाइसों (रेफ़रंस डिवाइस देखें) की लैंडस्केप इनर स्क्रीन पर, सिर्फ़ पोर्ट्रेट मोड में की जाने वाली गतिविधियों को लैंडस्केप मोड में बदल दिया जाता है, ताकि वे अनफ़ोल्ड किए गए नैचुरल ओरिएंटेशन के साथ अलाइन हो सकें. ऐप्लिकेशन को जब ज़बरदस्ती घुमाया जाता है, तो वह लेटरबॉक्स में दिखता है.
इनर फ़्रंट कैमरे को काटना: कुछ फ़ोल्ड किए जा सकने वाले डिवाइसों पर, इनर फ़्रंट कैमरे का सेंसर लैंडस्केप ओरिएंटेशन में होता है. फ़ोल्ड किए जा सकने वाले इनर डिसप्ले पर कैमरे की झलक को ज़बरदस्ती घुमाने के साथ ही, Android, इनर फ़्रंट (लैंडस्केप) कैमरा फ़ील्ड ऑफ़ व्यू को भी क्रॉप करता है. इससे सेंसर, डिवाइस की स्क्रीन की दिशा के बिलकुल उलट वीडियो कैप्चर करता है.
कैमरे की झलक को ज़बरदस्ती रीफ़्रेश करना: फ़ोर्स रोटेशन के बाद, सिस्टम गतिविधि के तरीकों
onStop()
औरonStart()
(डिफ़ॉल्ट रूप से) याonPause()
औरonResume()
(OVERRIDE_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE के ज़रिए लागू किया गया, हर ऐप्लिकेशन के लिए बदलाव) के बीच साइकल करता है. इससे यह पक्का किया जाता है कि कैमरे की झलक सही तरीके से दिखे.आसपेक्ट रेशियो (लंबाई-चौड़ाई का अनुपात) की स्केलिंग: सिस्टम, फ़ोर्स घुमाए गए कैमरे की झलक के आसपेक्ट रेशियो (लंबाई-चौड़ाई का अनुपात) को डाइनैमिक तौर पर बदलकर, ज़्यादा से ज़्यादा आसपेक्ट रेशियो (लंबाई-चौड़ाई का अनुपात) में करता है. इससे यह पक्का होता है कि कैमरे की झलक का आसपेक्ट रेशियो सही तरीके से स्केल किया गया है.
अगर ऐप्लिकेशन, कैमरे की झलक को सही तरीके से मैनेज करते हैं, तो ऐप्लिकेशन डेवलपर इन समस्याओं को हल करने के लिए, इन तरीकों का इस्तेमाल नहीं कर सकते. हर ऐप्लिकेशन के हिसाब से लागू होने वाले बदलाव देखें.
आम तौर पर गलत इस्तेमाल किए जाने वाले एपीआई
Android ने कई विंडो मोड और फ़ोल्ड किए जा सकने वाले डिवाइसों जैसी सुविधाओं के लिए सहायता जोड़ी है. इसलिए, लेगसी एपीआई को बंद कर दिया गया है और उन्हें अप-टू-डेट एपीआई से बदल दिया गया है. ये एपीआई, सभी डिसप्ले साइज़ और डिवाइस फ़ॉर्म फ़ैक्टर के लिए काम करते हैं. हालांकि, पुराने वर्शन के साथ काम करने की सुविधा के लिए, अब भी पुराने API उपलब्ध हैं.
कुछ View
API, खास मकसद के लिए डिज़ाइन किए गए हैं, जो डेवलपर को हमेशा ठीक से समझ नहीं आते.
समस्या
डेवलपर, अब काम न करने वाले Display
एपीआई का इस्तेमाल करना जारी रखते हैं. साथ ही, यह गलत तरीके से मान लेते हैं कि एपीआई, डिवाइस के डिसप्ले एरिया के बजाय ऐप्लिकेशन के बाउंड दिखाते हैं. इसके अलावा, डेवलपर सामान्य डिसप्ले मेट्रिक पाने के लिए, गलती से खास मकसद वाले व्यू एपीआई का इस्तेमाल करते हैं.
इस वजह से, ऐप्लिकेशन विंडो के साइज़ में बदलाव करने के बाद, यूज़र इंटरफ़ेस (यूआई) एलिमेंट को फिर से पोज़िशन करते समय गलत हिसाब लगाया जाता है. इससे लेआउट से जुड़ी समस्याएं आती हैं.
अब काम नहीं करता और आम तौर पर गलत इस्तेमाल किए जाने वाले Display API:
ज़्यादा जानकारी के लिए, मल्टी-विंडो मोड काम करता है लेख पढ़ें.
View API का गलत इस्तेमाल:
ऑप्टिमाइज़ेशन
यूज़र इंटरफ़ेस (यूआई) एलिमेंट की जगह तय करने के लिए, कभी भी फ़िज़िकल डिसप्ले साइज़ पर भरोसा न करें. अपने ऐप्लिकेशन को WindowMetrics
पर आधारित एपीआई पर माइग्रेट करें. इनमें ये WindowManager
एपीआई भी शामिल हैं:
प्लेटफ़ॉर्म:
Jetpack:
कंपैटबिलिटी से जुड़े समाधान
दो बदलाव, काम नहीं करने वाले Display
एपीआई और गलत इस्तेमाल किए गए View
एपीआई में बदलाव करते हैं. इससे ऐप्लिकेशन की सीमाएं दिखाने में मदद मिलती है: Display
एपीआई के लिए ALWAYS_SANDBOX_DISPLAY_APIS
और View
एपीआई के लिए OVERRIDE_SANDBOX_VIEW_BOUNDS_APIS
. ALWAYS_SANDBOX_DISPLAY_APIS
, डिफ़ॉल्ट रूप से उन ऐप्लिकेशन पर भी लागू होता है जो साइज़ कंपैटबिलिटी मोड की ज़रूरी शर्तें पूरी करते हैं.
पारदर्शी गतिविधियां
पारदर्शी गतिविधियां, पारदर्शी बैकग्राउंड स्टाइल की वजह से होती हैं. उदाहरण के लिए:
<style name="Transparent" parent="AppTheme">
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowBackground">@android:color/transparent</item>
</style>
Theme.MaterialComponents.Dialog
जैसी डायलॉग से जुड़ी थीम में, गतिविधियों को पारदर्शी बनाने वाली स्टाइल शामिल हो सकती हैं.
पारदर्शी गतिविधियां, डिसप्ले के सभी उपलब्ध स्पेस को कवर नहीं करती हैं. इसलिए, इन्हें मैनेज करना मुश्किल होता है. ऐसा इसलिए होता है, क्योंकि डिसप्ले का उपलब्ध स्पेस, कॉन्फ़िगरेशन में होने वाले बदलावों के आधार पर बदल सकता है. जैसे, डिवाइस को घुमाना, डिवाइस को फ़ोल्ड करना और अनफ़ोल्ड करना, और मल्टी-विंडो मोड.
समस्या
पारदर्शी ऐक्टिविटी, टास्क ऐक्टिविटी स्टैक में पारदर्शी ऐक्टिविटी के नीचे मौजूद, पहली ऐक्टिविटी के बॉर्डर के मुताबिक होनी चाहिए. हालांकि, अनुमति वाला डायलॉग बॉक्स दिखाने वाली कोई ऐसी गतिविधि, ट्रैंपोलिन हो सकती है. ट्रैंपोलिन ऐसी गतिविधि होती है जो किसी दूसरी गतिविधि को लॉन्च करती है और फिर गायब हो जाती है. इसलिए, सिस्टम उस ट्रैंपोलिन गतिविधि की सीमाओं का पता नहीं लगा सकता जिसने अनुमति वाला डायलॉग बॉक्स दिखाने वाली गतिविधि को लॉन्च किया है.
ऑप्टिमाइज़ेशन
पारदर्शी गतिविधियां, टास्क के गतिविधि स्टैक में सबसे ऊपर की ओपेक गतिविधि से उनकी कंस्ट्रेंट को इनहेरिट कर लेती हैं. पारदर्शी गतिविधि के पूरे लाइफ़साइकल के लिए, ओपैक गतिविधि उपलब्ध होनी चाहिए. इसमें गतिविधि बनाने से लेकर उसे मिटाने तक की पूरी प्रोसेस शामिल है. इस वजह से, ट्रैंपोलिन गतिविधियों से अनुमति के अनुरोध लॉन्च न करें.
अगर कोई ट्रैंपोलिन गतिविधि, अनुमति का अनुरोध शुरू करती है, तो हो सकता है कि उपयोगकर्ता को अनुमति वाला डायलॉग न दिखे. ऐसा इसलिए, क्योंकि उपयोगकर्ता के डायलॉग का जवाब देने से पहले ही ट्रैंपोलिन गतिविधि को मिटा दिया जाएगा. साथ ही, डायलॉग गतिविधि के डाइमेंशन और पोज़िशन का हिसाब गलत तरीके से लगाया जा सकता है.
ऐप्लिकेशन को हमेशा उन गतिविधियों से अनुमति के अनुरोध लॉन्च करने चाहिए जो उपयोगकर्ता की अनुमति मिलने तक दिखती हैं.
गोल कोने
बैकग्राउंड की पारदर्शिता तय करने वाली स्टाइल या गतिविधि का कॉन्टेंट, डिसप्ले स्पेस को पूरा नहीं कर पाता है. इस वजह से, गतिविधि को पारदर्शी रखा जा सकता है. अगर कोई पारदर्शी गतिविधि, डिसप्ले के उपलब्ध स्पेस को भर देती है, तो डिवाइस बनाने वाली कंपनी के कॉन्फ़िगर करने पर, सिस्टम गतिविधि के किनारों को अपने-आप गोल कर देता है. हालांकि, अगर अनुमति वाले डायलॉग बॉक्स जैसी पारदर्शी गतिविधि, उपलब्ध जगह को पूरा नहीं भरती है, तो यह तय करना आपके ऊपर है कि कोने गोल करने हैं या नहीं.
अनुमति वाले डायलॉग, उपलब्ध डिसप्ले स्पेस को नहीं भरते. इसकी वजह यह है कि डायलॉग लेआउट आम तौर पर, LayoutParams.MATCH_PARENT के बजाय LayoutParams.WRAP_CONTENT का इस्तेमाल करता है.
कंपैटिबिलिटी से जुड़ी समस्या हल करने का तरीका
डायलॉग गतिविधियां लॉन्च करने वाली गतिविधियों को तब तक दिखने दें, जब तक उपयोगकर्ता डायलॉग का जवाब न दे दे.
सिस्टम यह पक्का करता है कि पारदर्शी गतिविधि, गतिविधि स्टैक में पारदर्शी गतिविधि के नीचे मौजूद पहली अपारदर्शी गतिविधि की सभी पाबंदियों को इनहेरिट करती है. इनमें ये पाबंदियां भी शामिल हैं:
- साइज़ के साथ काम करने वाला मोड
- ओरिएंटेशन
- आसपेक्ट रेशियो
यूनिटी गेम
Unity गेम, Android की फ़ुल स्क्रीन या मल्टी-विंडो मोड में चलते हैं. हालांकि, ऐप्लिकेशन को मल्टी-विंडो मोड में डालने पर, कई Unity गेम फ़ोकस खो देते हैं और कॉन्टेंट दिखाना बंद कर देते हैं.
समस्या
Unity 2019.4 में, Android पर मल्टी-विंडो मोड के साथ काम करने के लिए, Unity 2019.4 में Resizable Window
विकल्प जोड़ा गया है. हालांकि,
शुरुआत में लागू करने पर, मल्टी-विंडो मोड में
गतिविधि के लाइफ़साइकल पर सही तरह से प्रतिक्रिया नहीं मिली. इस वजह से, ऐप्लिकेशन से फ़ोकस न होने पर, UnityPlayer ने वीडियो चलाना बंद कर दिया. प्लेयर ने स्क्रीन को काला कर दिया या गेम का आखिरी फ़्रेम फ़्रीज़ कर दिया. गेमप्ले सिर्फ़ तब फिर से शुरू हुआ, जब उपयोगकर्ता ने स्क्रीन पर टैप किया. Unity इंजन का इस्तेमाल करने वाले कई ऐप्लिकेशन में यह समस्या आती है. साथ ही, ये ऐप्लिकेशन मल्टी-विंडो मोड में ब्लैक विंडो के तौर पर रेंडर होते हैं.
ऑप्टिमाइज़ेशन
Unity को 2019.4.40 या इसके बाद के वर्शन में अपग्रेड करें और अपने गेम को फिर से एक्सपोर्ट करें. Android Player की सेटिंग में जाकर, Resizable Window
विकल्प को सही का निशान लगाकर चुनें. ऐसा न करने पर, गेम मल्टी-विंडो मोड में पूरी तरह दिखने के बावजूद, गेम तब रुक जाता है, जब वह फ़ोकस में नहीं होता.
कंपैटबिलिटी से जुड़े समाधान
डिवाइस बनाने वाली कंपनियां, मल्टी-विंडो मोड में किसी ऐप्लिकेशन पर नकली फ़ोकस इवेंट देने के लिए, हर ऐप्लिकेशन के लिए OVERRIDE_ENABLE_COMPAT_FAKE_FOCUS
ओवरराइड लागू कर सकती हैं. बदलाव करने से, गतिविधि के डेटा को फिर से ड्रॉ किया जा सकता है
और ब्लैक आउट नहीं किया जा सकता.
अपने ऐप्लिकेशन के साथ काम करने से जुड़ी समस्याओं का पता लगाना
अपने ऐप्लिकेशन की जांच करने और अलग-अलग डिवाइस टाइप के हिसाब से, इसके काम करने के तरीके को समझने के लिए, इन संसाधनों का फ़ायदा लें:
- डिवाइस की स्ट्रीमिंग: Google डेटा सेंटर में होस्ट किए गए प्रोडक्शन डिवाइसों (जिसमें पहचान वाले डिवाइस शामिल हैं) पर अपने ऐप्लिकेशन की जांच करने के लिए, Firebase की मदद से चलने वाली Android डिवाइस स्ट्रीमिंग देखें
- Android Studio Hedgehog में एमुलेटर: रेफ़रंस डिवाइसों के लिए एमुलेटर बनाने के बारे में जानने के लिए, वर्चुअल डिवाइस बनाना और मैनेज करना लेख पढ़ें
- Android Studio में, साइज़ बदला जा सकने वाला एमुलेटर: वर्चुअल डिवाइसों को ऐक्सेस करने के बारे में जानने के लिए, Android एमुलेटर पर ऐप्लिकेशन चलाना लेख पढ़ें
लेटरबॉक्स किया गया है
पुष्टि करें कि हर गतिविधि, ऐप्लिकेशन में उपलब्ध पूरी डिसप्ले स्पेस का इस्तेमाल कर सकती है. सबसे पहले, अपने टेस्ट फ़ोल्डर में इस कोड के बारे में बताएं:
Kotlin
fun Activity.isLetterboxed() : Boolean { if (isInMultiWindowMode) return false val wmc = WindowMetricsCalculator.getOrCreate() val currentBounds = wmc.computeCurrentWindowMetrics(this).bounds val maxBounds = wmc.computeMaximumWindowMetrics(this).bounds val isScreenPortrait = maxBounds.height() > maxBounds.width() return if (isScreenPortrait) { currentBounds.height() < maxBounds.height() } else { currentBounds.width() < maxBounds.width() } }
Java
public boolean isLetterboxed(Activity activity) { if (activity.isInMultiWindowMode()) { return false; } WindowMetricsCalculator wmc = WindowMetricsCalculator.getOrCreate(); Rect currentBounds = wmc.computeCurrentWindowMetrics(activity).getBounds() Rect maxBounds = wmc.computeMaximumWindowMetrics(activity).getBounds(); boolean isScreenPortrait = maxBounds.height() > maxBounds.width(); return (isScreenPortrait) ? currentBounds.height() < maxBounds.height() : currentBounds.width() < maxBounds.width(); }
इसके बाद, व्यवहार की पुष्टि करने के लिए टेस्ट करें और पक्का करें कि टारगेट गतिविधि को लेटरबॉक्स पर न दिखाया गया हो:
Kotlin
@get:Rule val activityRule = ActivityScenarioRule(MainActivity::class.java) @Test fun activity_launched_notLetterBoxed() { activityRule.scenario.onActivity { assertThat(it.isLetterboxed()).isFalse() } }
Java
@Rule public ActivityScenarioRule<MainActivity> rule = new ActivityScenarioRule<>(MainActivity.class); public void activity_launched_notLetterBoxed() { try (ActivityScenario<MainActivity> scenario = ActivityScenario.launch(MainActivity.class)) { scenario.onActivity(activity -> { assertThat(isLetterboxed(activity)).isFalse(); }); } }
आम तौर पर, इस तरह का टेस्ट तब तक चलाएं, जब तक यह पास न हो जाए और यह पुष्टि न हो जाए कि आपके ऐप्लिकेशन की गतिविधियां, ऐप्लिकेशन के लिए उपलब्ध पूरे डिसप्ले स्पेस को ले लेती हैं. अपने ऐप्लिकेशन को सभी तरह के डिवाइसों पर टेस्ट करें, ताकि यह पक्का किया जा सके कि ऐप्लिकेशन एक जैसा काम कर रहा है.
हर ऐप्लिकेशन के लिए अलग-अलग समयसीमा तय करना
Android, बदलाव करने की सुविधा देता है. इससे, ऐप्लिकेशन के कॉन्फ़िगर किए गए व्यवहार में बदलाव होता है. उदाहरण के लिए, FORCE_RESIZE_APP
ओवरराइड सिस्टम को साइज़ के साथ काम करने वाले मोड को बायपास करने और डिसप्ले डाइमेंशन के हिसाब से ऐप्लिकेशन का साइज़ बदलने का निर्देश देता है. भले ही, ऐप्लिकेशन मेनिफ़ेस्ट में resizeableActivity="false"
की जानकारी दी गई हो.
डिवाइस बनाने वाली कंपनियां, चुनिंदा ऐप्लिकेशन या सभी ऐप्लिकेशन के लिए, बड़ी स्क्रीन वाले खास डिवाइसों पर बदलाव लागू करती हैं. Android 14 (एपीआई लेवल 34) और इसके बाद के वर्शन पर, उपयोगकर्ता डिवाइस की सेटिंग की मदद से ऐप्लिकेशन में बदलाव कर सकते हैं.
हर ऐप्लिकेशन के लिए उपयोगकर्ता की ओर से बदलाव करना
Android 14 और उसके बाद के वर्शन पर, सेटिंग मेन्यू की मदद से उपयोगकर्ता ऐप्लिकेशन का आसपेक्ट रेशियो बदल सकते हैं. रेफ़रंस डिवाइस जैसे बड़ी स्क्रीन वाले डिवाइसों पर मेन्यू लागू होता है.
मेन्यू में, डिवाइस पर इंस्टॉल किए गए सभी ऐप्लिकेशन की सूची होती है. उपयोगकर्ता कोई ऐप्लिकेशन चुनते हैं और फिर ऐप्लिकेशन के आसपेक्ट रेशियो (लंबाई-चौड़ाई का अनुपात) को 3:4, 1:1, फ़ुल स्क्रीन या डिवाइस बनाने वाली कंपनी के कॉन्फ़िगर की गई अन्य वैल्यू पर सेट करते हैं. उपयोगकर्ता आसपेक्ट रेशियो को ऐप्लिकेशन के डिफ़ॉल्ट आसपेक्ट रेशियो में रीसेट भी कर सकते हैं, जिसके बारे में ऐप्लिकेशन मेनिफ़ेस्ट में बताया गया है.
ऐप्लिकेशन, नीचे दिए गए PackageManager.Property
टैग को सेट करके, साथ काम करने से जुड़े बदलाव से ऑप्ट आउट कर सकते हैं:
PROPERTY_COMPAT_ALLOW_USER_ASPECT_RATIO_OVERRIDE
उपयोगकर्ता के आसपेक्ट रेशियो के साथ काम करने की सुविधा को बदलने से ऑप्ट आउट करने के लिए, अपने ऐप्लिकेशन मेनिफ़ेस्ट में प्रॉपर्टी जोड़ें और वैल्यू को
false
पर सेट करें:<application> <property android:name="android.window. PROPERTY_COMPAT_ALLOW_USER_ASPECT_RATIO_OVERRIDE" android:value="false" /> </application>
आपके ऐप्लिकेशन को डिवाइस की सेटिंग में मौजूद ऐप्लिकेशन की सूची से हटा दिया जाएगा. उपयोगकर्ता, ऐप्लिकेशन के आसपेक्ट रेशियो को बदल नहीं पाएंगे.
प्रॉपर्टी को
true
पर सेट करने से कोई असर नहीं पड़ता.PROPERTY_COMPAT_ALLOW_USER_ASPECT_RATIO_FULLSCREEN_OVERRIDE
उपयोगकर्ता के आसपेक्ट रेशियो के साथ काम करने की सुविधा को बदलने के लिए, फ़ुल स्क्रीन मोड के विकल्प से ऑप्ट आउट करने के लिए, अपने ऐप्लिकेशन मेनिफ़ेस्ट में प्रॉपर्टी जोड़ें और वैल्यू को
false
पर सेट करें:<application> <property android:name="android.window.PROPERTY_COMPAT_ALLOW_USER_ASPECT_RATIO_FULLSCREEN_OVERRIDE" android:value="false" /> </application>
डिवाइस की सेटिंग में, फ़ुल-स्क्रीन वाले विकल्प को आसपेक्ट रेशियो (लंबाई-चौड़ाई का अनुपात) के विकल्पों की सूची से हटा दिया जाता है. उपयोगकर्ता आपके ऐप्लिकेशन पर फ़ुल-स्क्रीन ओवरराइड को लागू नहीं कर पाएंगे.
इस प्रॉपर्टी को
true
पर सेट करने से कोई असर नहीं पड़ता.
अपने ऐप्लिकेशन को सभी स्क्रीन के लिए ऑप्टिमाइज़ करें: अपने ऐप्लिकेशन में आसपेक्ट रेशियो (लंबाई-चौड़ाई का अनुपात) से जुड़ी पाबंदियां सेट न करें. डिसप्ले स्पेस की उपलब्ध जगह के हिसाब से अलग-अलग लेआउट दिखाने के लिए, विंडो के साइज़ की क्लास का इस्तेमाल करें.
डिवाइस बनाने वाली कंपनी के हिसाब से ऐप्लिकेशन में किए गए बदलाव
डिवाइस मैन्युफ़ैक्चरर, चुनिंदा डिवाइसों पर हर ऐप्लिकेशन के हिसाब से बदलाव लागू करते हैं. रेफ़रंस डिवाइस, डिफ़ॉल्ट रूप से कई ऐप्लिकेशन पर कुछ बदलाव लागू कर सकते हैं.
ऐप्लिकेशन, ज़्यादातर बदलावों से ऑप्ट आउट कर सकते हैं. इसके बारे में जानने के लिए, यहां दी गई हर ऐप्लिकेशन के लिए बदलाव टेबल देखें.
आपके पास, अपने ऐप्लिकेशन को बदलावों के साथ चालू या बंद करके टेस्ट करने का विकल्प है. इसके लिए, आपको कम्पैटिबिलिटी फ़्रेमवर्क का इस्तेमाल करना होगा. कम्पैटिबिलिटी फ़्रेमवर्क टूल देखें. चालू होने पर, बदलाव पूरे ऐप्लिकेशन पर लागू होते हैं.
Android डीबग ब्रिज (adb) का इस्तेमाल करके भी, बदलावों को चालू या बंद किया जा सकता है. साथ ही, यह भी तय किया जा सकता है कि आपके ऐप्लिकेशन पर कौनसे बदलाव लागू हों.
बदलावों को इस तरह से चालू या बंद करें:
adb shell am compat enable/disable <override name/id> <package>
रेफ़रंस डिवाइसों के लिए, देखें कि कौनसे ओवरराइड आपके ऐप्लिकेशन पर लागू होते हैं:
adb shell dumpsys platform_compat | grep <package name>
नीचे दी गई टेबल में, ऐप्लिकेशन में बदलाव करने के साथ-साथ ऐप्लिकेशन को ऑप्टिमाइज़ करने के दिशा-निर्देश दिए गए हैं. इससे, ऐप्लिकेशन को अपने-आप लागू होने वाले बदलावों पर भरोसा नहीं करना पड़ेगा. कुछ बदलावों से ऑप्ट आउट करने के लिए, अपने ऐप्लिकेशन मेनिफ़ेस्ट में प्रॉपर्टी फ़्लैग जोड़े जा सकते हैं.
हर ऐप्लिकेशन के हिसाब से नीति में हुए बदलाव | |||
---|---|---|---|
टाइप | नाम | आईडी | ब्यौरा |
साइज़ बदलने की सुविधा | FORCE_RESIZE_APP | 174042936 | कॉन्फ़िगरेशन में बदलाव होने पर, ऐप्लिकेशन के साइज़ के साथ काम करने वाले मोड को बायपास करता है. |
FORCE_NON_RESIZE_APP | 181136395 | कॉन्फ़िगरेशन में बदलाव करने पर, ऐप्लिकेशन को साइज़ के साथ काम करने वाले मोड में चालू करता है. | |
आसपेक्ट रेशियो | OVERRIDE_MIN_ASPECT_RATIO | 174042980 | आसपेक्ट रेशियो में बदलाव करने के लिए, गेटकीपर को बदलना ज़रूरी है. |
OVERRIDE_MIN_ASPECT_RATIO_PORTRAIT_ONLY | 203647190 | यह नीति चालू होने पर, सिर्फ़ पोर्ट्रेट मोड में की जाने वाली गतिविधियों को सीमित किया जा सकता है. | |
OVERRIDE_MIN_ASPECT_RATIO_MEDIUM | 180326845 | आसपेक्ट रेशियो (लंबाई-चौड़ाई का अनुपात) को कम से कम 3:2 पर सेट करता है. | |
OVERRIDE_MIN_ASPECT_RATIO_LARGE | 180326787 | इसके बाद, यह कम से कम आसपेक्ट रेशियो (लंबाई-चौड़ाई का अनुपात) को 16:9 पर सेट कर देता है. | |
OVERRIDE_MIN_ASPECT_RATIO_TO_ALIGN_WITH_SPLIT_SCREEN | 208648326 | डिसप्ले के साइज़ के 50% हिस्से (या स्प्लिट-स्क्रीन के आसपेक्ट रेशियो) में फ़िट होने के लिए, आसपेक्ट रेशियो को कम से कम कर देता है. | |
OVERRIDE_MIN_ASPECT_RATIO_EXCLUDE_PORTRAIT_FULLSCREEN | 218959984 | इससे कम से कम आसपेक्ट रेशियो (लंबाई-चौड़ाई का अनुपात) बदलने की सुविधा बंद हो जाती है, ताकि डिवाइस पोर्ट्रेट होने पर ऐप्लिकेशन फ़ुल स्क्रीन मोड में दिखें. | |
ओरिएंटेशन | OVERRIDE_ANY_ORIENTATION | 265464455 | किसी भी ओरिएंटेशन को बदलने की सुविधा चालू करता है. |
OVERRIDE_ANY_ORIENTATION_TO_USER | 310816437 | यह ओरिएंटेशन, साइज़ बदलने, और आसपेक्ट रेशियो (लंबाई-चौड़ाई का अनुपात) से जुड़ी पाबंदियों को बदलता है. | |
OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT | 265452344 | अगर किसी गतिविधि का ओरिएंटेशन तय नहीं है, तो इसे पोर्ट्रेट ओरिएंटेशन पर सेट कर देता है. | |
OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR | 265451093 | किसी गतिविधि का ओरिएंटेशन (स्क्रीन की दिशा) तय नहीं होने पर, ओरिएंटेशन को nosensor पर बदल देता है (डिवाइस के नैचुरल ओरिएंटेशन का इस्तेमाल करें). |
|
OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE | 266124927 | सिर्फ़ लैंडस्केप ऐप्लिकेशन को 180 डिग्री घुमाता है. | |
OVERRIDE_ORIENTATION_ONLY_FOR_CAMERA | 265456536 | इससे, ऐप्लिकेशन के कैमरे से कनेक्ट होने पर, स्क्रीन की दिशा को बदलने के दायरे को सीमित किया जाता है. | |
OVERRIDE_USE_DISPLAY_LANDSCAPE_NATURAL_ORIENTATION | 255940284 | टास्क के फ़ुल स्क्रीन मोड में होने पर, डिसप्ले का नैचुरल ओरिएंटेशन वाला लैंडस्केप सेट किया जाता है. लेटरबॉक्स किए गए टास्क के मामले में भी यह सेट किया जा सकता है. | |
OVERRIDE_ENABLE_COMPAT_IGNORE_WITH_ORIENTATION | 254631730 | रोटेशन अनंत लूप से बचने के लिए ऐप्लिकेशन के स्क्रीन की दिशा के अनुरोधों को अनदेखा करता है. | |
OVERRIDE_ENABLE_COMPAT_IGNORE_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED | 273509367 | किसी ऐक्टिविटी को फिर से लॉन्च करने के दौरान, ओरिएंटेशन के बार-बार किए गए अनुरोधों को अनदेखा करता है. अगर Android को पता चलता है कि कोई ऐप्लिकेशन एक सेकंड में कम से कम दो नए ओरिएंटेशन का अनुरोध कर रहा है, तो सिस्टम इसे रोटेशन के अनलिमिटेड लूप के तौर पर मानता है और बदलाव लागू करता है. | |
OVERRIDE_RESPECT_REQUESTED_ORIENTATION | 236283604 | डिवाइस बनाने वाली कंपनी की स्क्रीन की दिशा को अनदेखा करने की सेटिंग को बंद करके, लेटरबॉक्स किए जाने से बचा जा सकता है. | |
सैंडबॉक्स एपीआई | NEVER_SANDBOX_DISPLAY_APIS | 184838306 | किसी भी डिसप्ले एपीआई के काम करने के तरीके में बदलाव नहीं करता. |
ALWAYS_SANDBOX_DISPLAY_APIS | 185004937 | ऐप्लिकेशन में मौजूद Display एपीआई को ऐप्लिकेशन के बाउंड दिखाने के लिए मजबूर करता है. Display एपीआई, डिसप्ले एरिया के लॉजिकल बाउंड दिखाते हैं. हालांकि, कभी-कभी ऐप्लिकेशन यह मान लेता है कि Display एपीआई, ऐप्लिकेशन के बाउंड दिखाते हैं. इससे यूज़र इंटरफ़ेस (यूआई) से जुड़ी समस्याएं आती हैं. |
|
OVERRIDE_SANDBOX_VIEW_BOUNDS_APIS | 237531167 | ऐप्लिकेशन में इस्तेमाल किए गए View एपीआई को ऐप्लिकेशन के बाउंड दिखाने के लिए मजबूर करता है. View एपीआई, डिसप्ले एरिया के लॉजिकल बाउंड दिखाते हैं. हालांकि, कभी-कभी ऐप्लिकेशन यह मान लेता है कि View एपीआई, ऐप्लिकेशन के बाउंड दिखाते हैं. इससे यूज़र इंटरफ़ेस (यूआई) से जुड़ी समस्याएं आती हैं. |
|
Camera compat | OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION | 263959004 | फ़ोर्स रोटेशन बंद कर देता है. डिफ़ॉल्ट रूप से, कैमरे की झलक देखने के लिए इस्तेमाल होने वाले सभी ऐप्लिकेशन, कैमरे के ओरिएंटेशन के हिसाब से फ़ोर्स रोटेट हो जाते हैं. |
OVERRIDE_CAMERA_COMPAT_ डिसेल_REFRESH | 264304459 | कैमरे की झलक को जबरदस्ती घुमाने पर, डिफ़ॉल्ट रूप से लागू होने वाले हार्ड रीफ़्रेश को हटाता है. | |
OVERRIDE_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE | 264301586 | कैमरे की झलक को ज़बरदस्ती घुमाने पर, हार्ड रीफ़्रेश को सॉफ़्ट रीफ़्रेश पर स्विच कर देता है. इससे फ़ोर्स रोटेशन के दौरान स्थिति को बनाए रखने में मदद मिलती है. कैमरे की झलक को ज़बरदस्ती घुमाने पर, Android डिफ़ॉल्ट रूप से हार्ड रीफ़्रेश लागू करता है. हार्ड रीफ़्रेश करने पर, ऐप्लिकेशन की स्थिति में बदलाव हो सकता है या वे ब्लैक आउट हो सकते हैं. ऐसा इस बात पर निर्भर करता है कि ऐप्लिकेशन ने अपनी पिछली स्थिति को कैश मेमोरी में कैसे सेव किया था. | |
OVERRIDE_CAMERA_LANDSCAPE_TO_PORTRAIT | 250678880 | सामने वाले कैमरे के इमेज बफ़र को काटें. अगर इस नीति को बदलने की सुविधा बंद है, तो सामने वाले कैमरे के ज़रिए काटे जाने की सुविधा हटा दी जाती है. साथ ही, कैमरे की झलक का फ़ील्ड ऑफ़ व्यू (कैमरे से दिख रहा व्यू) बढ़ जाता है. फ़ोल्ड किए जा सकने वाले कुछ डिवाइसों पर डिफ़ॉल्ट रूप से, रेफ़रंस डिवाइस देखें. इनर फ़्रंट कैमरे का इस्तेमाल करते समय, सिस्टम सभी कैमरा ऐप्लिकेशन के कैमरे की झलक को क्रॉप करता है. | |
अन्य चीज़ें | OVERRIDE_ENABLE_COMPAT_FAKE_FOCUS | 263259275 | स्प्लिट-स्क्रीन मोड में, ऐप्लिकेशन पर फ़ोकस हटने पर, उसे काले रंग में नहीं बदलता. ऐप्लिकेशन का कॉन्टेंट दिखाने से पहले, ऐप्लिकेशन फ़ोकस होने का इंतज़ार करता है. इस वजह से, ऐप्लिकेशन फ़्रीज़ हो सकता है या काला हो सकता है. बदलाव करने की सुविधा की मदद से, Android ऐप्लिकेशन को फ़र्ज़ी फ़ोकस इवेंट भेज सकता है. इससे ऐप्लिकेशन को फिर से कॉन्टेंट दिखाने का सिग्नल मिलता है. |
FORCE_RESIZE_APP
जिन पैकेज पर बदलाव लागू किया गया है उनके साइज़ में बदलाव करने की सुविधा चालू करता है. इससे, ऐप्लिकेशन को मल्टी-विंडो मोड में रखा जा सकता है या नहीं. हालांकि, स्क्रीन का साइज़ बदलने पर, साइज़ के साथ काम करने वाले मोड में डाले बिना ऐप्लिकेशन को साइज़ बदला जा सकता है.
ऐप्लिकेशन, ओवरराइड करने की सुविधा के बराबर नतीजे कैसे पा सकते हैं
ऐप्लिकेशन मेनिफ़ेस्ट में, android:resizeableActivity
एट्रिब्यूट को true
पर सेट करें. इसके अलावा, android:resizeableActivity=false
की मदद से मल्टी-विंडो मोड को बंद करते समय, साइज़ बदलने की सुविधा चालू करने के लिए, android.supports_size_changes
मेटाडेटा फ़्लैग को true
पर सेट करें.
ऐप्लिकेशन ऑप्टिमाइज़ करने का तरीका
रिस्पॉन्सिव/अडैप्टिव लेआउट इस्तेमाल करें, ताकि ऐप्लिकेशन सभी साइज़ और आसपेक्ट रेशियो के हिसाब से अपने-आप फ़िट हो सकें. अलग-अलग स्क्रीन साइज़ के साथ काम करना देखें.
बदलाव को बदलने की सुविधा को बंद करने या उससे ऑप्ट आउट करने का तरीका
प्रॉपर्टी फ़्लैग PROPERTY_COMPAT_ALLOW_RESIZEABLE_ACTIVITY_OVERRIDES
को false
पर सेट करें.
बदलाव करने के लिए प्रॉपर्टी फ़्लैग
<property android:name="android.window.PROPERTY_COMPAT_ALLOW_RESIZEABLE_ACTIVITY_OVERRIDES"
android:value="true|false"/>
बदलाव को लागू करने के लिए adb निर्देश
बदलाव लागू करने और ऐप्लिकेशन का साइज़ बदलने के लिए:
adb shell am compat enable FORCE_RESIZE_APP <package>
ओवरराइड हटाने के लिए:
adb shell am compat disable FORCE_RESIZE_APP <package>
ध्यान दें: ये निर्देश, बदलाव को सिर्फ़ कुछ समय के लिए लागू या हटाते हैं.
FORCE_NON_RESIZE_APP
उन पैकेज को ज़बरदस्ती चालू करता है जिन पर बदलाव लागू किया गया है. इसका साइज़ बदलने की ज़रूरत नहीं होती. साथ ही, कॉन्फ़िगरेशन में बदलाव होने पर, साइज़ के साथ काम करने वाले मोड का इस्तेमाल करें.
ऐप्लिकेशन को, ओवरराइड के तौर पर मिलने वाला नतीजा कैसे मिल सकता है
ऐप्लिकेशन मेनिफ़ेस्ट में, android:resizeableActivity
एट्रिब्यूट और
android.supports_size_changes
मेटाडेटा फ़्लैग, दोनों को false
पर सेट करें. साथ ही, ऑरिएंटेशन या आसपेक्ट रेशियो की पाबंदी का एलान करें.
ऐप्लिकेशन को ऑप्टिमाइज़ करने का तरीका
जिन ऐप्लिकेशन का साइज़ बदलने पर भी परफ़ॉर्मेंस अच्छी रहती है उनके लिए, android:resizeableActivity
या android.supports_size_changes
को true
पर सेट किया जाना चाहिए.
साइज़ बदलने पर ठीक तरह से काम करने के लिए, दूसरे ऐप्लिकेशन को बेहतर बनाया जाना चाहिए. android:resizeableActivity देखें.
बदलाव की सुविधा को बंद करने या उससे ऑप्ट आउट करने का तरीका
प्रॉपर्टी फ़्लैग PROPERTY_COMPAT_ALLOW_RESIZEABLE_ACTIVITY_OVERRIDES
को false
पर सेट करें.
बदलाव करने के लिए प्रॉपर्टी फ़्लैग
<property android:name="android.window.PROPERTY_COMPAT_ALLOW_RESIZEABLE_ACTIVITY_OVERRIDES"
android:value="true|false"/>
बदलाव को लागू करने के लिए adb निर्देश
ओवरराइड लागू करने और ऐप्लिकेशन को रीसाइज़ न करने के लिए:
adb shell am compat enable FORCE_NON_RESIZE_APP <package>
बदलाव को हटाने के लिए:
adb shell am compat disable FORCE_NON_RESIZE_APP <package>
ध्यान दें: ये निर्देश, बदलाव को सिर्फ़ कुछ समय के लिए लागू या हटाते हैं.
OVERRIDE_MIN_ASPECT_RATIO
सभी बदलावों के लिए निगरानी करने वाला, जो किसी दिए गए कम से कम आसपेक्ट रेशियो को लागू करता है.
ऐप्लिकेशन को, ओवरराइड के तौर पर मिलने वाला नतीजा कैसे मिल सकता है
गतिविधि या ऐप्लिकेशन लेवल पर android:minAspectRatio
सेट करें.
ऐप्लिकेशन को ऑप्टिमाइज़ करने का तरीका
अपने ऐप्लिकेशन में आसपेक्ट रेशियो (लंबाई-चौड़ाई का अनुपात) से जुड़ी पाबंदियां सेट न करें. पक्का करें कि आपका ऐप्लिकेशन अलग-अलग साइज़ की स्क्रीन पर काम करता हो. स्क्रीन पर आपके ऐप्लिकेशन के पास मौजूद जगह के आधार पर, अलग-अलग लेआउट के साथ काम करने के लिए, विंडो साइज़ क्लास का इस्तेमाल करें. WindowSizeClass
एपीआई लिखें और WindowSizeClass
एपीआई देखें लेख पढ़ें.
बदलाव की सुविधा को बंद करने या उससे ऑप्ट आउट करने का तरीका
आसपेक्ट रेशियो की पाबंदी तय करें या प्रॉपर्टी फ़्लैग PROPERTY_COMPAT_ALLOW_MIN_ASPECT_RATIO_OVERRIDE
को false
पर सेट करें.
बदलाव को अलाइन करने के लिए प्रॉपर्टी फ़्लैग
<property android:name="android.window.PROPERTY_COMPAT_ALLOW_MIN_ASPECT_RATIO_OVERRIDE"
android:value="false"/>
बदलाव की जांच करने के लिए adb कमांड
बदलाव लागू करने के लिए:
adb shell am compat enable OVERRIDE_MIN_ASPECT_RATIO <package>
बदलाव को हटाने के लिए:
adb shell am compat disable OVERRIDE_MIN_ASPECT_RATIO <package>
ध्यान दें: ये निर्देश, बदलाव को सिर्फ़ कुछ समय के लिए लागू या हटाते हैं.
OVERRIDE_MIN_ASPECT_RATIO_PORTRAIT_ONLY
ऐप्लिकेशन की उन सेटिंग पर पाबंदी लगाता है जो सिर्फ़ पोर्ट्रेट ओरिएंटेशन वाली गतिविधियों के लिए, तय किए गए आसपेक्ट रेशियो को लागू करने के लिए मजबूर करती हैं. यह डिफ़ॉल्ट रूप से चालू होता है और सिर्फ़ तब लागू होता है, जब OVERRIDE_MIN_ASPECT_RATIO
भी चालू हो.
ऐप्लिकेशन को, ओवरराइड के तौर पर मिलने वाला नतीजा कैसे मिल सकता है
OVERRIDE_MIN_ASPECT_RATIO देखें.
ऐप्लिकेशन को ऑप्टिमाइज़ करने का तरीका
OVERRIDE_MIN_ASPECT_RATIO देखें.
बदलाव को बदलने की सुविधा को बंद करने या उससे ऑप्ट आउट करने का तरीका
OVERRIDE_MIN_ASPECT_RATIO देखें.
बदलाव को अलाइन करने के लिए प्रॉपर्टी फ़्लैग
OVERRIDE_MIN_ASPECT_RATIO देखें.
बदलाव की जांच करने के लिए adb कमांड
बदलाव लागू करने के लिए:
adb shell am compat enable OVERRIDE_MIN_ASPECT_RATIO_PORTRAIT_ONLY <package>
बदलाव को हटाने के लिए:
adb shell am compat disable OVERRIDE_MIN_ASPECT_RATIO_PORTRAIT_ONLY <package>
ध्यान दें: निर्देश सिर्फ़ कुछ समय के लिए लागू होते हैं या ओवरराइड को हटाते हैं.
OVERRIDE_MIN_ASPECT_RATIO_MEDIUM
गतिविधि के आसपेक्ट रेशियो को कम से कम मीडियम वैल्यू (3:2) पर सेट करता है
ऐप्लिकेशन, ओवरराइड करने की सुविधा के बराबर नतीजे कैसे पा सकते हैं
OVERRIDE_MIN_ASPECT_RATIO देखें.
ऐप्लिकेशन ऑप्टिमाइज़ करने का तरीका
OVERRIDE_MIN_ASPECT_RATIO देखें.
बदलाव को बदलने की सुविधा को बंद करने या उससे ऑप्ट आउट करने का तरीका
OVERRIDE_MIN_ASPECT_RATIO देखें.
बदलाव को अलाइन करने के लिए प्रॉपर्टी फ़्लैग
OVERRIDE_MIN_ASPECT_RATIO देखें.
बदलाव को लागू करने के लिए adb निर्देश
बदलाव लागू करने के लिए:
adb shell am compat enable OVERRIDE_MIN_ASPECT_RATIO_MEDIUM <package>
बदलाव को हटाने के लिए:
adb shell am compat disable OVERRIDE_MIN_ASPECT_RATIO_MEDIUM <package>
ध्यान दें: ये निर्देश, बदलाव को सिर्फ़ कुछ समय के लिए लागू या हटाते हैं.
OVERRIDE_MIN_ASPECT_RATIO_LARGE
इससे गतिविधि के कम से कम आसपेक्ट रेशियो (लंबाई-चौड़ाई का अनुपात) को बड़ी वैल्यू (16:9) पर सेट किया जाता है
ऐप्लिकेशन को, ओवरराइड के तौर पर मिलने वाला नतीजा कैसे मिल सकता है
OVERRIDE_MIN_ASPECT_RATIO देखें.
ऐप्लिकेशन ऑप्टिमाइज़ करने का तरीका
OVERRIDE_MIN_ASPECT_RATIO देखें.
बदलाव को बदलने की सुविधा को बंद करने या उससे ऑप्ट आउट करने का तरीका
OVERRIDE_MIN_ASPECT_RATIO देखें.
बदलाव करने के लिए प्रॉपर्टी फ़्लैग
OVERRIDE_MIN_ASPECT_RATIO देखें.
बदलाव को लागू करने के लिए adb निर्देश
बदलाव लागू करने के लिए:
adb shell am compat enable OVERRIDE_MIN_ASPECT_RATIO_LARGE <package>
बदलाव को हटाने के लिए:
adb shell am compat disable OVERRIDE_MIN_ASPECT_RATIO_LARGE <package>`
ध्यान दें: ये निर्देश, बदलाव को सिर्फ़ कुछ समय के लिए लागू या हटाते हैं.
OVERRIDE_MIN_ASPECT_RATIO_TO_ALIGN_WITH_SPLIT_SCREEN
स्प्लिट स्क्रीन आसपेक्ट रेशियो का इस्तेमाल करने की सुविधा चालू करता है. यह ऐप्लिकेशन को स्प्लिट-स्क्रीन मोड में, उपलब्ध सभी जगह का इस्तेमाल करने की अनुमति देता है. इससे, लेटरबॉक्सिंग से बचा जा सकता है.
ऐप्लिकेशन, ओवरराइड करने की सुविधा के बराबर नतीजे कैसे पा सकते हैं
OVERRIDE_MIN_ASPECT_RATIO देखें.
ऐप्लिकेशन को ऑप्टिमाइज़ करने का तरीका
OVERRIDE_MIN_ASPECT_RATIO देखें.
बदलाव को बदलने की सुविधा को बंद करने या उससे ऑप्ट आउट करने का तरीका
OVERRIDE_MIN_ASPECT_RATIO देखें.
बदलाव को अडजस्ट करने के लिए प्रॉपर्टी फ़्लैग
OVERRIDE_MIN_ASPECT_RATIO देखें.
बदलाव की जांच करने के लिए adb कमांड
बदलाव लागू करने के लिए:
adb shell am compat enable OVERRIDE_MIN_ASPECT_RATIO_TO_ALIGN_WITH_SPLIT_SCREEN <package>
बदलाव को हटाने के लिए:
adb shell am compat disable OVERRIDE_MIN_ASPECT_RATIO_TO_ALIGN_WITH_SPLIT_SCREEN <package>
ध्यान दें: ये निर्देश, बदलाव को सिर्फ़ कुछ समय के लिए लागू या हटाते हैं.
OVERRIDE_MIN_ASPECT_RATIO_EXCLUDE_PORTRAIT_FULLSCREEN
इससे पोर्ट्रेट फ़ुल स्क्रीन में, सबसे कम आसपेक्ट रेशियो (लंबाई-चौड़ाई का अनुपात) को बदलने की सुविधा बंद होती है. ऐसा करने पर, स्क्रीन पर उपलब्ध पूरी जगह का इस्तेमाल किया जाता है.
ऐप्लिकेशन, ओवरराइड करने की सुविधा के बराबर नतीजे कैसे पा सकते हैं
OVERRIDE_MIN_ASPECT_RATIO देखें.
ऐप्लिकेशन ऑप्टिमाइज़ करने का तरीका
OVERRIDE_MIN_ASPECT_RATIO देखें.
बदलाव को बदलने की सुविधा को बंद करने या उससे ऑप्ट आउट करने का तरीका
OVERRIDE_MIN_ASPECT_RATIO देखें.
बदलाव को अडजस्ट करने के लिए प्रॉपर्टी फ़्लैग
OVERRIDE_MIN_ASPECT_RATIO देखें.
बदलाव को लागू करने के लिए adb निर्देश
बदलाव लागू करने के लिए:
adb shell am compat enable OVERRIDE_MIN_ASPECT_RATIO_EXCLUDE_PORTRAIT_FULLSCREEN <package>
बदलाव को हटाने के लिए:
adb shell am compat disable OVERRIDE_MIN_ASPECT_RATIO_EXCLUDE_PORTRAIT_FULLSCREEN <package>
ध्यान दें: निर्देश सिर्फ़ कुछ समय के लिए लागू होते हैं या ओवरराइड को हटाते हैं.
OVERRIDE_ANY_ORIENTATION
किसी भी ओरिएंटेशन को बदलने के लिए, इन बदलावों को चालू करता है:
- OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT
- OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR
- OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE
ऐप्लिकेशन को, ओवरराइड के तौर पर मिलने वाला नतीजा कैसे मिल सकता है
activity:screenOrientation
मेनिफ़ेस्ट एट्रिब्यूट को सेट करें या Activity#setRequestedOrientation()
एपीआई का इस्तेमाल करें.
ऐप्लिकेशन को ऑप्टिमाइज़ करने का तरीका
आपके ऐप्लिकेशन को सभी ओरिएंटेशन (स्क्रीन की दिशा) पर काम करना चाहिए. ओरिएंटेशन में बदलाव करना, कॉन्फ़िगरेशन में बदलाव करना होता है. इसे दो तरीकों से मैनेज किया जा सकता है: सिस्टम को ऐप्लिकेशन को मिटाने और फिर से बनाने की अनुमति देना या कॉन्फ़िगरेशन में बदलावों को खुद मैनेज करना. कॉन्फ़िगरेशन में किए गए बदलावों को खुद मैनेज करने पर, ViewModel
का इस्तेमाल करके ऐप्लिकेशन की स्थिति को बनाए रखा जा सकता है. बहुत सीमित मामलों में, आप सिर्फ़ छोटे डिसप्ले पर
ओरिएंटेशन को लॉक करने का फ़ैसला ले सकते हैं. हालांकि, हो सकता है कि ऐसा करने से स्क्रीन की दिशा बदल न जाए और उपयोगकर्ता ज़रूरत के हिसाब से
ऐप्लिकेशन को न बदल पाए. Android 12L और उसके बाद के वर्शन पर,
डिवाइस कॉन्फ़िगरेशन की मदद से, तय की गई स्क्रीन की दिशा बदल सकती है. कॉन्फ़िगरेशन के बदलावों को मैनेज करने और सभी ओरिएंटेशन को सपोर्ट करने के बारे में ज़्यादा जानकारी के लिए, कॉन्फ़िगरेशन में बदलाव मैनेज करना, ViewModel की खास जानकारी, और ऐप्लिकेशन ओरिएंटेशन की सुविधा को फ़ोन पर तो बंद करना, लेकिन बड़ी स्क्रीन वाले डिवाइसों पर नहीं देखें.
बदलाव को बदलने की सुविधा को बंद करने या उससे ऑप्ट आउट करने का तरीका
प्रॉपर्टी के फ़्लैग को false
पर सेट करें.
बदलाव को अलाइन करने के लिए प्रॉपर्टी फ़्लैग
<property android:name="android.window.PROPERTY_COMPAT_ALLOW_ORIENTATION_OVERRIDE"
android:value="true|false"/>
बदलाव की जांच करने के लिए adb कमांड
बदलाव लागू करने के लिए:
adb shell am compat enable OVERRIDE_ANY_ORIENTATION <package>
बदलाव को हटाने के लिए:
adb shell am compat disable OVERRIDE_ANY_ORIENTATION <package>
ध्यान दें: निर्देश सिर्फ़ कुछ समय के लिए लागू होते हैं या ओवरराइड को हटाते हैं.
OVERRIDE_ANY_ORIENTATION_TO_USER
इससे ऐप्लिकेशन, डिसप्ले के उपलब्ध स्पेस को भर पाता है. यह ऐप्लिकेशन मेनिफ़ेस्ट में बताई गई स्क्रीन की दिशा, साइज़, और आसपेक्ट रेशियो से जुड़ी पाबंदियों को बदल देता है. साथ ही, Activity#setRequestedOrientation()
पर किए गए किसी भी कॉल को अनदेखा कर देता है.
ऐप्लिकेशन, ओवरराइड करने की सुविधा के जैसे नतीजे कैसे पा सकते हैं
android:screenOrientation
मेनिफ़ेस्ट एट्रिब्यूट को सेट न करें या एट्रिब्यूट को"user"
पर सेट करें.android:resizeableActivity
मेनिफ़ेस्ट एट्रिब्यूट कोtrue
पर सेट करें.छोटी स्क्रीन पर,
android:resizeableActivity=false
की मदद से मल्टी-विंडो मोड को बंद करते समय, ऐप्लिकेशन के साइज़ में बदलाव करने की सुविधा चालू करने के लिए,android.supports_size_changes
मेटाडेटा फ़्लैग कोtrue
पर सेट करें.minAspectRatio
औरmaxAspectRatio
को न सेट करें.
ऐप्लिकेशन को ऑप्टिमाइज़ करने का तरीका
अपने ऐप्लिकेशन को सभी ओरिएंटेशन के साथ काम करने की सुविधा दें. अपने ऐप्लिकेशन के मेनिफ़ेस्ट में screenOrientation
स्पेसिफ़िकेशन सेट न करें. अपने ऐप्लिकेशन के मेनिफ़ेस्ट में android:resizeableActivity
एट्रिब्यूट को true
पर सेट करके, ऐप्लिकेशन के साइज़ में बदलाव करने, मल्टी-विंडो मोड, और सभी डिसप्ले आसपेक्ट रेशियो की सुविधा का इस्तेमाल करें. अलग-अलग स्क्रीन साइज़ के साथ काम करना देखें.
बदलाव को बदलने की सुविधा को बंद करने या उससे ऑप्ट आउट करने का तरीका
OVERRIDE_ANY_ORIENTATION
देखें.
बदलाव को अडजस्ट करने के लिए प्रॉपर्टी फ़्लैग
OVERRIDE_ANY_ORIENTATION
देखें.
बदलाव की जांच करने के लिए adb कमांड
बदलाव लागू करने के लिए:
adb shell am compat enable OVERRIDE_ANY_ORIENTATION_TO_USER <package>
बदलाव को हटाने के लिए:
adb shell am compat disable OVERRIDE_ANY_ORIENTATION_TO_USER <package>
ध्यान दें: ये निर्देश, बदलाव को सिर्फ़ कुछ समय के लिए लागू या हटाते हैं.
OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT
इससे पैकेज की सभी गतिविधियों के लिए पोर्ट्रेट ओरिएंटेशन की सुविधा चालू होती है. OVERRIDE_ANY_ORIENTATION चालू होने पर ही, बदलाव करने की सुविधा का इस्तेमाल किया जाता है. ऐसा तब किया जाता है, जब गतिविधि में कोई दूसरा तय ओरिएंटेशन न दिया गया हो.
ऐप्लिकेशन, ओवरराइड करने की सुविधा के जैसे नतीजे कैसे पा सकते हैं
OVERRIDE_ANY_ORIENTATION
देखें.
ऐप्लिकेशन ऑप्टिमाइज़ करने का तरीका
OVERRIDE_ANY_ORIENTATION
देखें.
बदलाव को बदलने की सुविधा को बंद करने या उससे ऑप्ट आउट करने का तरीका
OVERRIDE_ANY_ORIENTATION
देखें.
बदलाव को अलाइन करने के लिए प्रॉपर्टी फ़्लैग
OVERRIDE_ANY_ORIENTATION
देखें.
बदलाव की जांच करने के लिए adb कमांड
बदलाव लागू करने के लिए:
adb shell am compat enable OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT <package>
बदलाव को हटाने के लिए:
adb shell am compat disable OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT <package>
ध्यान दें: निर्देश सिर्फ़ कुछ समय के लिए लागू होते हैं या ओवरराइड को हटाते हैं.
OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR
पैकेज में मौजूद सभी गतिविधियों के लिए, nosensor ओरिएंटेशन चालू करता है. जब तक OVERRIDE_ANY_ORIENTATION चालू नहीं होता, तब तक बदलाव करने की सुविधा का इस्तेमाल सिर्फ़ तब किया जाता है, जब गतिविधि में कोई दूसरा तय ओरिएंटेशन तय न किया गया हो.
ऐप्लिकेशन को, ओवरराइड के तौर पर मिलने वाला नतीजा कैसे मिल सकता है
OVERRIDE_ANY_ORIENTATION
देखें.
ऐप्लिकेशन को ऑप्टिमाइज़ करने का तरीका
OVERRIDE_ANY_ORIENTATION
देखें.
बदलाव की सुविधा को बंद करने या उससे ऑप्ट आउट करने का तरीका
OVERRIDE_ANY_ORIENTATION
देखें.
बदलाव करने के लिए प्रॉपर्टी फ़्लैग
OVERRIDE_ANY_ORIENTATION
देखें.
बदलाव को लागू करने के लिए adb निर्देश
बदलाव लागू करने के लिए:
adb shell am compat enable OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR <package>
बदलाव को हटाने के लिए:
adb shell am compat disable OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR <package>
ध्यान दें: निर्देश सिर्फ़ कुछ समय के लिए लागू होते हैं या ओवरराइड को हटाते हैं.
OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE
यह पैकेज में मौजूद सभी गतिविधियों के लिए, reverseलैंडस्केप ओरिएंटेशन को चालू करता है. जब तक OVERRIDE_ANY_ORIENTATION चालू नहीं होता, तब तक बदलाव करने की सुविधा का इस्तेमाल सिर्फ़ तब किया जाता है, जब गतिविधि में कोई दूसरा तय ओरिएंटेशन तय न किया गया हो.
ऐप्लिकेशन को, ओवरराइड के तौर पर मिलने वाला नतीजा कैसे मिल सकता है
OVERRIDE_ANY_ORIENTATION
देखें.
ऐप्लिकेशन ऑप्टिमाइज़ करने का तरीका
OVERRIDE_ANY_ORIENTATION
देखें.
बदलाव की सुविधा को बंद करने या उससे ऑप्ट आउट करने का तरीका
OVERRIDE_ANY_ORIENTATION
देखें.
बदलाव करने के लिए प्रॉपर्टी फ़्लैग
OVERRIDE_ANY_ORIENTATION
देखें.
बदलाव की जांच करने के लिए adb कमांड
बदलाव लागू करने के लिए:
adb shell am compat enable OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE <package>
बदलाव को हटाने के लिए:
adb shell am compat disable OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE <package>
ध्यान दें: ये निर्देश, बदलाव को सिर्फ़ कुछ समय के लिए लागू या हटाते हैं.
OVERRIDE_ORIENTATION_ONLY_FOR_CAMERA
सीमाएं OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT, OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR, और OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE सिर्फ़ कैमरा कनेक्शन चालू होने पर ही लागू होता है.
ऐप्लिकेशन को, ओवरराइड के तौर पर मिलने वाला नतीजा कैसे मिल सकता है
OVERRIDE_ANY_ORIENTATION
देखें.
ऐप्लिकेशन ऑप्टिमाइज़ करने का तरीका
OVERRIDE_ANY_ORIENTATION
देखें.
बदलाव को बदलने की सुविधा को बंद करने या उससे ऑप्ट आउट करने का तरीका
OVERRIDE_ANY_ORIENTATION
देखें.
बदलाव को अडजस्ट करने के लिए प्रॉपर्टी फ़्लैग
OVERRIDE_ANY_ORIENTATION
देखें.
बदलाव की जांच करने के लिए adb कमांड
बदलाव लागू करने के लिए:
adb shell am compat enable OVERRIDE_ORIENTATION_ONLY_FOR_CAMERA <package>
बदलाव को हटाने के लिए:
adb shell am compat disable OVERRIDE_ORIENTATION_ONLY_FOR_CAMERA <package>
ध्यान दें: निर्देश सिर्फ़ कुछ समय के लिए लागू होते हैं या ओवरराइड को हटाते हैं.
OVERRIDE_USE_DISPLAY_LANDSCAPE_NATURAL_ORIENTATION
जब ये शर्तें पूरी होती हैं, तब डिसप्ले ओरिएंटेशन को लैंडस्केप नेचुरल ओरिएंटेशन पर सेट कर देता है:
- गतिविधि फ़ुल स्क्रीन मोड में है
- ऑप्ट आउट कॉम्पोनेंट प्रॉपर्टी
PROPERTY_COMPAT_ALLOW_DISPLAY_ORIENTATION_OVERRIDE
चालू नहीं है - डिवाइस मैन्युफ़ैक्चरर ने डिसप्ले के लिए, ओरिएंटेशन के अनुरोध को अनदेखा करने की सेटिंग चालू की है
- डिसप्ले का ओरिएंटेशन लैंडस्केप हो
ऐप्लिकेशन को, ओवरराइड के तौर पर मिलने वाला नतीजा कैसे मिल सकता है
लागू नहीं. समस्या को ऐप्लिकेशन लॉजिक में हल किया जाना चाहिए.
ऐप्लिकेशन को ऑप्टिमाइज़ करने का तरीका
OVERRIDE_ANY_ORIENTATION
देखें.
बदलाव की सुविधा को बंद करने या उससे ऑप्ट आउट करने का तरीका
प्रॉपर्टी फ़्लैग को PROPERTY_COMPAT_ALLOW_DISPLAY_ORIENTATION_OVERRIDE
को false
पर सेट करें.
बदलाव को अडजस्ट करने के लिए प्रॉपर्टी फ़्लैग
<property android:name="android.window.PROPERTY_COMPAT_ALLOW_DISPLAY_ORIENTATION_OVERRIDE"
android:value="true|false"/>
बदलाव की जांच करने के लिए adb कमांड
बदलाव लागू करने के लिए:
adb shell am compat enable OVERRIDE_USE_DISPLAY_LANDSCAPE_NATURAL_ORIENTATION <package>
बदलाव को हटाने के लिए:
adb shell am compat disable OVERRIDE_USE_DISPLAY_LANDSCAPE_NATURAL_ORIENTATION <package>
ध्यान दें: निर्देश सिर्फ़ कुछ समय के लिए लागू होते हैं या ओवरराइड को हटाते हैं.
OVERRIDE_ENABLE_COMPAT_IGNORE_REQUESTED_ORIENTATION
इस नीति से, ऐसी नीति को चालू किया जाता है जो ऐप्लिकेशन को फिर से लॉन्च करने पर या कैमरे के साथ काम करने के दौरान, ऐप्लिकेशन को कॉल करने Activity#setRequestedOrientation()
के जवाब में, ऐप्लिकेशन की स्क्रीन की दिशा को अपडेट नहीं करता है.
ऐप्लिकेशन, ओवरराइड करने की सुविधा के बराबर नतीजे कैसे पा सकते हैं
प्रॉपर्टी के फ़्लैग को true
पर सेट करें.
ऐप्लिकेशन को ऑप्टिमाइज़ करने का तरीका
OVERRIDE_ANY_ORIENTATION
देखें.
बदलाव की सुविधा को बंद करने या उससे ऑप्ट आउट करने का तरीका
प्रॉपर्टी के फ़्लैग को false
पर सेट करें.
बदलाव करने के लिए प्रॉपर्टी फ़्लैग
<property android:name="android.window.PROPERTY_COMPAT_IGNORE_REQUESTED_ORIENTATION"
android:value="true|false"/>
बदलाव की जांच करने के लिए adb कमांड
बदलाव लागू करने के लिए:
adb shell am compat enable OVERRIDE_ENABLE_COMPAT_IGNORE_REQUESTED_ORIENTATION <package>
बदलाव को हटाने के लिए:
adb shell am compat disable OVERRIDE_ENABLE_COMPAT_IGNORE_REQUESTED_ORIENTATION <package>
ध्यान दें: निर्देश सिर्फ़ कुछ समय के लिए लागू होते हैं या ओवरराइड को हटाते हैं.
OVERRIDE_ENABLE_COMPAT_IGNORE_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED
साथ काम करने की उस नीति को चालू करता है जो ऐप्लिकेशन की स्क्रीन की दिशा के लिए लेटरबॉक्स नहीं किया गया है. यह ऐप्लिकेशन, एक सेकंड में Activity#setRequestedOrientation()
को दो बार से ज़्यादा बार कॉल करने के लिए, ऐप्लिकेशन के अनुरोध किए गए ओरिएंटेशन को अनदेखा करता है.
ऐप्लिकेशन, ओवरराइड करने की सुविधा के बराबर नतीजे कैसे पा सकते हैं
लागू नहीं. समस्या को ऐप्लिकेशन लॉजिक में हल किया जाना चाहिए.
ऐप्लिकेशन ऑप्टिमाइज़ करने का तरीका
OVERRIDE_ANY_ORIENTATION
देखें.
बदलाव की सुविधा को बंद करने या उससे ऑप्ट आउट करने का तरीका
प्रॉपर्टी के फ़्लैग को
PROPERTY_COMPAT_ALLOW_IGNORING_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED
से
false
पर सेट करें.
बदलाव को अलाइन करने के लिए प्रॉपर्टी फ़्लैग
<property android:name="android.window.PROPERTY_COMPAT_ALLOW_IGNORING_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED"
android:value="false"/>
बदलाव की जांच करने के लिए adb कमांड
बदलाव लागू करने के लिए:
adb shell am compat enable OVERRIDE_ENABLE_COMPAT_IGNORE_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED <package>
बदलाव को हटाने के लिए:
adb shell am compat disable OVERRIDE_ENABLE_COMPAT_IGNORE_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED <package>
ध्यान दें: निर्देश सिर्फ़ कुछ समय के लिए लागू होते हैं या ओवरराइड को हटाते हैं.
OVERRIDE_RESPECT_अनुरोधित_ORIENTATION
इससे पैकेज को स्क्रीन की दिशा के अनुरोध पर अनदेखा करने की सुविधा नहीं मिलती. इसे डिवाइस बनाने वाली कंपनियां, डिसप्ले एरिया या पूरे डिसप्ले के लिए चालू कर सकती हैं.
ऐप्लिकेशन, ओवरराइड करने की सुविधा के ज़रिए मिलने वाले नतीजे को कैसे पा सकते हैं
लागू नहीं. समस्या को ऐप्लिकेशन लॉजिक में हल किया जाना चाहिए.
ऐप्लिकेशन को ऑप्टिमाइज़ करने का तरीका
OVERRIDE_ANY_ORIENTATION
देखें.
बदलाव की सुविधा को बंद करने या उससे ऑप्ट आउट करने का तरीका
ऑप्ट-आउट नहीं किया जा सकता. अगर ऐप्लिकेशन किसी ऐसे डिवाइस के साथ काम नहीं करता है जिस पर डिवाइस बनाने वाली कंपनी ने स्क्रीन की दिशा को नज़रअंदाज़ करने का अनुरोध करने की सेटिंग चालू की हुई है, तो बदलाव को बंद करना खतरनाक हो सकता है. बदलाव को बंद करने के लिए, Android Developer Relations से संपर्क करें.
बदलाव को अडजस्ट करने के लिए प्रॉपर्टी फ़्लैग
इस बदलाव के लिए कोई प्रॉपर्टी फ़्लैग नहीं है.
बदलाव की जांच करने के लिए adb कमांड
बदलाव लागू करने के लिए:
adb shell am compat enable OVERRIDE_RESPECT_REQUESTED_ORIENTATION <package>
बदलाव को हटाने के लिए:
adb shell am compat disable OVERRIDE_RESPECT_REQUESTED_ORIENTATION <package>
ध्यान दें: ये निर्देश, बदलाव को सिर्फ़ कुछ समय के लिए लागू या हटाते हैं.
NEVER_SANDBOX_DISPLAY_APIS
इससे पैकेज को लेटरबॉक्स या साइज़ के साथ काम करने वाले मोड की गतिविधि के लिए, कभी भी Display
एपीआई सैंडबॉक्स
की सुविधा लागू नहीं करनी पड़ती. Display
API, डिसप्ले एरिया की सीमाएं दिखाना जारी रखते हैं.
ऐप्लिकेशन, ओवरराइड करने की सुविधा के बराबर नतीजे कैसे पा सकते हैं
android:resizeableActivity
मेनिफ़ेस्ट एट्रिब्यूट को true
पर सेट करके या android.supports_size_changes
मेटाडेटा फ़्लैग को true
पर सेट करके, गतिविधियों को साइज़ में बदलने लायक बनाएं.
ऐप्लिकेशन ऑप्टिमाइज़ करने का तरीका
साइज़ को पूरी तरह से बदलने का एलान करने वाले ऐप्लिकेशन को कभी भी यूज़र इंटरफ़ेस (यूआई) एलिमेंट को सही जगह पर रखने के लिए, डिसप्ले साइज़ पर भरोसा नहीं करना चाहिए. अपने ऐप्लिकेशन को अप-टू-डेट एपीआई पर माइग्रेट करें, जो WindowMetrics
उपलब्ध कराते हैं. अगर Jetpack Compose का इस्तेमाल किया जा रहा है, तो WindowSizeClass
एपीआई का इस्तेमाल करके यूज़र इंटरफ़ेस (यूआई) बनाएं. यह इस बात से तय होता है कि मौजूदा डिसप्ले में ऐप्लिकेशन का कितना स्क्रीन एरिया है. विंडो साइज़ क्लास का इस्तेमाल करना देखें.
बदलाव को बदलने की सुविधा को बंद करने या उससे ऑप्ट आउट करने का तरीका
ऑप्ट-आउट नहीं किया जा सकता. बंद किए गए एपीआई से माइग्रेट करें.
बदलाव को अडजस्ट करने के लिए प्रॉपर्टी फ़्लैग
इस बदलाव के लिए कोई प्रॉपर्टी फ़्लैग नहीं है.
बदलाव की जांच करने के लिए adb कमांड
बदलाव लागू करने के लिए:
adb shell am compat enable NEVER_SANDBOX_DISPLAY_APIS <package>
बदलाव को हटाने के लिए:
adb shell am compat disable NEVER_SANDBOX_DISPLAY_APIS <package>
ध्यान दें: ये निर्देश, बदलाव को सिर्फ़ कुछ समय के लिए लागू या हटाते हैं.
ALWAYS_SANDBOX_DISPLAY_APIS
विंडोिंग मोड चाहे जो भी हो, पैकेज को हमेशा Display
एपीआई सैंडबॉक्सिंग
लागू रखने के लिए मजबूर करती है. Display
एपीआई हमेशा ऐप्लिकेशन के बाउंड की जानकारी देते हैं.
ऐप्लिकेशन, ओवरराइड करने की सुविधा के बराबर नतीजे कैसे पा सकते हैं
गतिविधियों को रीसाइज़ न किया जा सकने वाला बताने के लिए, android:resizeableActivity
एट्रिब्यूट को false
पर सेट करें या android.supports_size_changes
मेटाडेटा फ़्लैग को false
पर सेट करें.
ऐप्लिकेशन ऑप्टिमाइज़ करने का तरीका
जिन ऐप्लिकेशन के लिए यह बताया गया है कि उनके साइज़ में पूरी तरह से बदलाव किया जा सकता है उन्हें यूज़र इंटरफ़ेस (यूआई) एलिमेंट को पोज़िशन करने के लिए, डिसप्ले साइज़ पर कभी भी भरोसा नहीं करना चाहिए. अपने ऐप्लिकेशन को, इस्तेमाल नहीं किए जा रहे एपीआई से, WindowMetrics
की सुविधा देने वाले अप-टू-डेट एपीआई पर माइग्रेट करें. WindowMetricsCalculator
देखें.
बदलाव की सुविधा को बंद करने या उससे ऑप्ट आउट करने का तरीका
ऑप्ट-आउट नहीं किया जा सकता. बंद किए गए एपीआई से माइग्रेट करें.
बदलाव को अडजस्ट करने के लिए प्रॉपर्टी फ़्लैग
इस बदलाव के लिए कोई प्रॉपर्टी फ़्लैग नहीं है.
बदलाव की जांच करने के लिए adb कमांड
बदलाव लागू करने के लिए:
adb shell am compat enable ALWAYS_SANDBOX_DISPLAY_APIS <package>
बदलाव को हटाने के लिए:
adb shell am compat disable ALWAYS_SANDBOX_DISPLAY_APIS <package>
ध्यान दें: ये निर्देश, बदलाव को सिर्फ़ कुछ समय के लिए लागू या हटाते हैं.
OVERRIDE_SANDBOX_VIEW_BOUNDS_APIS
पैकेज को गतिविधि की सीमाओं के लिए, यहां दिए गए View
एपीआई को सैंडबॉक्स करने के लिए मजबूर करता है:
ऐप्लिकेशन को, ओवरराइड के तौर पर मिलने वाला नतीजा कैसे मिल सकता है
डिवाइस के डिसप्ले की सीमा के बजाय ऐप्लिकेशन विंडो की सीमाएं और ऑफ़सेट के हिसाब से ऑफ़सेट देने वाले एपीआई का इस्तेमाल करके, ऐप्लिकेशन कोड में आ रही समस्या को हल करें.
ऐप्लिकेशन ऑप्टिमाइज़ करने का तरीका
ऐप्लिकेशन में View
एपीआई का इस्तेमाल किया जाना चाहिए. ऐसा इसलिए, ताकि ऐप्लिकेशन पर लेटरबॉक्सिंग और मल्टी-विंडो मोड लागू होने की संभावना को ध्यान में रखा जा सके. WindowMetricsCalculator
देखें.
बदलाव को बदलने की सुविधा को बंद करने या उससे ऑप्ट आउट करने का तरीका
प्रॉपर्टी फ़्लैग को PROPERTY_COMPAT_ALLOW_SANDBOXING_VIEW_BOUNDS_APIS
को false
पर सेट करें.
बदलाव को अडजस्ट करने के लिए प्रॉपर्टी फ़्लैग
<property android:name="android.window.PROPERTY_COMPAT_ALLOW_SANDBOXING_VIEW_BOUNDS_APIS"
android:value="false"/>
बदलाव की जांच करने के लिए adb कमांड
बदलाव लागू करने के लिए:
adb shell am compat enable OVERRIDE_SANDBOX_VIEW_BOUNDS_APIS <package>
बदलाव को हटाने के लिए:
adb shell am compat disable OVERRIDE_SANDBOX_VIEW_BOUNDS_APIS <package>
ध्यान दें: ये निर्देश, बदलाव को सिर्फ़ कुछ समय के लिए लागू या हटाते हैं.
ओवरराइड
बल रोटेशन अक्षम करता है. यह कुछ ऐप्लिकेशन पर उपयोगकर्ता अनुभव को बेहतर बनाता है.
ऐप्लिकेशन, ओवरराइड करने की सुविधा के बराबर नतीजे कैसे पा सकते हैं
प्रॉपर्टी के फ़्लैग को false
पर सेट करें.
ऐप्लिकेशन को ऑप्टिमाइज़ करने का तरीका
कैश मेमोरी में सेव किए गए कैमरा सेंसर की स्क्रीन या डिवाइस की जानकारी पर भरोसा न करें. कैमरे के साथ काम करने के बारे में जानकारी पाने के लिए, कैमरा व्यूफ़ाइंडर की सुविधा और अपने कैमरा ऐप्लिकेशन में, साइज़ में बदले जा सकने वाले प्लैटफ़ॉर्म के साथ काम करने की सुविधा लेख पढ़ें.
बदलाव की सुविधा को बंद करने या उससे ऑप्ट आउट करने का तरीका
प्रॉपर्टी फ़्लैग को PROPERTY_CAMERA_COMPAT_ALLOW_FORCE_ROTATION
को true
पर सेट करें.
बदलाव को अलाइन करने के लिए प्रॉपर्टी फ़्लैग
<property android:name="android.window.PROPERTY_CAMERA_COMPAT_ALLOW_FORCE_ROTATION"
android:value="true|false"/>
बदलाव की जांच करने के लिए adb कमांड
ओवरराइड लागू करने के लिए, जो ज़बरदस्ती रोटेशन को हटा देता है:
adb shell am compat enable OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION <package>
ज़बरदस्ती रोटेशन की सुविधा को हटाने के लिए:
adb shell am compat disable OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION <package>
ध्यान दें: निर्देश सिर्फ़ कुछ समय के लिए लागू होते हैं या ओवरराइड को हटाते हैं.
OVERRIDE_CAMERA_COMPAT_ बेहतरीन_REFRESH
फ़ोर्स रोटेशन के बाद, गतिविधि रीफ़्रेश करने की सुविधा बंद कर देता है. जब रीफ़्रेश करने से ऐप्लिकेशन में मौजूद स्टेटस मिट जाता है, तो उपयोगकर्ता अनुभव को बेहतर बनाता है.
ऐप्लिकेशन, ओवरराइड करने की सुविधा के बराबर नतीजे कैसे पा सकते हैं
प्रॉपर्टी फ़्लैग को PROPERTY_CAMERA_COMPAT_ALLOW_REFRESH
को false
पर सेट करें.
ऐप्लिकेशन को ऑप्टिमाइज़ करने का तरीका
OVERRIDE_CAMERA_COMPAT_ डिसेल_FORCE_ROTATION देखें.
बदलाव की सुविधा को बंद करने या उससे ऑप्ट आउट करने का तरीका
प्रॉपर्टी के फ़्लैग को true
पर सेट करें.
बदलाव करने के लिए प्रॉपर्टी फ़्लैग
<property android:name="android.window.PROPERTY_CAMERA_COMPAT_ALLOW_REFRESH"
android:value="true|false"/>
बदलाव की जांच करने के लिए adb कमांड
गतिविधि को रीफ़्रेश करने के विकल्प को लागू करने के लिए:
adb shell am compat enable OVERRIDE_CAMERA_COMPAT_DISABLE_REFRESH <package>
गतिविधि को रीफ़्रेश करने की अनुमति देने वाले बदलाव को हटाने के लिए:
adb shell am compat disable OVERRIDE_CAMERA_COMPAT_DISABLE_REFRESH <package>
ध्यान दें: निर्देश सिर्फ़ कुछ समय के लिए लागू होते हैं या ओवरराइड को हटाते हैं.
OVERRIDE_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE
कैमरे के साथ काम करने की सुविधा के लिए, डिवाइस के रोटेशन को जबरन लागू करने के बाद, जिन पैकेज पर यह लागू होता है उन्हें गतिविधि रीफ़्रेश करने के लिए, onResume()
→ onPause()
→ onResume()
साइकल का इस्तेमाल करने के बजाय, onResume()
→
onStop()
→ onResume()
साइकल का इस्तेमाल करने के लिए मजबूर किया जाता है.
ऐप्लिकेशन, ओवरराइड करने की सुविधा के बराबर नतीजे कैसे पा सकते हैं
प्रॉपर्टी फ़्लैग को PROPERTY_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE
को true
पर सेट करें.
ऐप्लिकेशन को ऑप्टिमाइज़ करने का तरीका
OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION देखें.
बदलाव को बदलने की सुविधा को बंद करने या उससे ऑप्ट आउट करने का तरीका
प्रॉपर्टी के फ़्लैग को false
पर सेट करें.
बदलाव करने के लिए प्रॉपर्टी फ़्लैग
<property android:name="android.window.PROPERTY_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE"
android:value="true|false"/>
बदलाव की जांच करने के लिए adb कमांड
बदलाव लागू करने के लिए:
adb shell am compat enable OVERRIDE_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE <package>
बदलाव को हटाने के लिए:
adb shell am compat disable OVERRIDE_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE <package>
ध्यान दें: निर्देश सिर्फ़ कुछ समय के लिए लागू होते हैं या ओवरराइड को हटाते हैं.
OVERRIDE_CAMERA_LANDSCAPE_TO_PORTRAIT
जब पोर्ट्रेट कैमरे का ओरिएंटेशन, डिवाइस के नैचुरल ओरिएंटेशन से मेल नहीं खाता, तो कैमरे के आउटपुट को दूसरे ओरिएंटेशन में काटने के लिए मजबूर करता है. कई ऐप्लिकेशन इस स्थिति को हैंडल नहीं कर पाते और स्ट्रेच की गई इमेज नहीं दिखाते.
ऐप्लिकेशन को, ओवरराइड के तौर पर मिलने वाला नतीजा कैसे मिल सकता है
प्रॉपर्टी फ़्लैग को PROPERTY_COMPAT_OVERRIDE_LANDSCAPE_TO_PORTRAIT
को true
पर सेट करें.
ऐप्लिकेशन को ऑप्टिमाइज़ करने का तरीका
OVERRIDE_CAMERA_COMPAT_ डिसेल_FORCE_ROTATION देखें.
बदलाव की सुविधा को बंद करने या उससे ऑप्ट आउट करने का तरीका
प्रॉपर्टी के फ़्लैग को false
पर सेट करें.
बदलाव को अलाइन करने के लिए प्रॉपर्टी फ़्लैग
<property android:name="android.camera.PROPERTY_COMPAT_OVERRIDE_LANDSCAPE_TO_PORTRAIT"
android:value="true|false"/>
बदलाव को लागू करने के लिए adb निर्देश
सामने वाले इनर कैमरे से काट-छांट करने की सुविधा को लागू करने के लिए:
adb shell am compat enable OVERRIDE_CAMERA_LANDSCAPE_TO_PORTRAIT <package>
कैमरे की जानकारी में किए गए बदलाव को हटाने के लिए, जिससे सामने वाले इनर कैमरे से ली गई फ़ोटो का कट-ऑफ़ हट जाता है:
adb shell am compat disable OVERRIDE_CAMERA_LANDSCAPE_TO_PORTRAIT <package>
ध्यान दें: ये निर्देश, बदलाव को सिर्फ़ कुछ समय के लिए लागू या हटाते हैं.
OVERRIDE_ अक्षम_MEDIA_PROJECTION_SINGLE_APP_OPTION
ऐप्लिकेशन को ऐप्लिकेशन की स्क्रीन शेयर करने की सुविधा से ऑप्ट आउट करने से रोकता है (मीडिया प्रोजेक्शन देखें). यह पाबंदी तब लागू की जाती है, जब ऐप्लिकेशन createConfigForDefaultDisplay()
एपीआई का गलत इस्तेमाल करके, ज़बरदस्ती फ़ुल-स्क्रीन कैप्चर करने की कोशिश करते हैं. साथ ही, सूचनाओं के कॉन्टेंट को दिखाकर उपयोगकर्ता की निजता को खतरे में डालते हैं. ये सूचनाएं, फ़ुल-स्क्रीन मोड में कैप्चर की जाती हैं, न कि ऐप्लिकेशन स्क्रीन शेयर करने की सुविधा की मदद से. यह पाबंदी, सभी ऐप्लिकेशन पर लागू होती है, भले ही वे किसी भी विंडो मोड में हों.
ऐप्लिकेशन को, ओवरराइड के तौर पर मिलने वाला नतीजा कैसे मिल सकता है
मीडिया प्रोजेक्शन के डिफ़ॉल्ट व्यवहार की अनुमति दें. इसे Android 14, एपीआई लेवल 34 में createScreenCaptureIntent()
के साथ लागू किया गया है. इसकी मदद से, उपयोगकर्ता यह तय कर सकते हैं कि उन्हें फ़ुल स्क्रीन या किसी ऐप्लिकेशन की विंडो शेयर करनी है या नहीं. इसके अलावा, createScreenCaptureIntent(MediaProjectionConfig)
को कॉल करके, createConfigForUserChoice()
पर दिए गए MediaProjectionConfig
आर्ग्युमेंट के साथ कॉल किया जा सकता है.
ऐप्लिकेशन को ऑप्टिमाइज़ करने का तरीका
उपयोगकर्ताओं को यह चुनने की अनुमति दें कि मीडिया प्रोजेक्शन के दौरान, डिवाइस का पूरा डिसप्ले शेयर करना है या ऐप्लिकेशन की विंडो. Android 14 में, यह डिफ़ॉल्ट रूप से डिसप्ले होता है.
मल्टी-विंडो मोड के साथ काम करने के लिए, ऐप्लिकेशन का साइज़ बदलने की सुविधा (resizeableActivity="true"
) बनाएं.
बदलाव की सुविधा को बंद करने या उससे ऑप्ट आउट करने का तरीका
उपयोगकर्ता की निजता को ध्यान में रखते हुए, आपका ऐप्लिकेशन इस बदलाव को बंद नहीं कर सकता या इससे ऑप्ट आउट नहीं कर सकता.
बदलाव करने के लिए प्रॉपर्टी फ़्लैग
कोई नहीं.
बदलाव को लागू करने के लिए adb निर्देश
स्क्रीन के किसी हिस्से को शेयर करने की सुविधा को चालू करने के लिए, ऐप्लिकेशन के स्क्रीन के किसी हिस्से को शेयर करने की सुविधा से ऑप्ट आउट करने की सेटिंग को बदलें:
adb shell am compat enable OVERRIDE_DISABLE_MEDIA_PROJECTION_SINGLE_APP_OPTION <package>
उस सेटिंग को हटाने के लिए जिससे ऐप्लिकेशन को स्क्रीन का कुछ हिस्सा शेयर करने की सुविधा से ऑप्ट आउट करने की अनुमति मिलती है:
adb shell am compat disable OVERRIDE_DISABLE_MEDIA_PROJECTION_SINGLE_APP_OPTION <package>
ध्यान दें: ये निर्देश, बदलाव को सिर्फ़ कुछ समय के लिए लागू या हटाते हैं.
OVERRIDE_ENABLE_COMPAT_FAKE_FOCUS
स्प्लिट-स्क्रीन मोड में, फ़ोकस में न होने वाले ऐप्लिकेशन के लिए, फ़ोकस होने का गलत मैसेज भेजने की सुविधा चालू करता है. कुछ गेम इंजन, ऐप्लिकेशन का कॉन्टेंट बनाने से पहले, फ़ोकस करने का इंतज़ार करते हैं. इसलिए, नकली फ़ोकस से ऐप्लिकेशन को तब रोका जाता है, जब उसे फिर से शुरू किया जाता है और तब तक फ़ोकस नहीं किया जाता.
ऐप्लिकेशन को, ओवरराइड के तौर पर मिलने वाला नतीजा कैसे मिल सकता है
प्रॉपर्टी फ़्लैग PROPERTY_COMPAT_ENABLE_FAKE_FOCUS
को true
पर सेट करें.
ऐप्लिकेशन को ऑप्टिमाइज़ करने का तरीका
अगर आपका ऐप्लिकेशन एक से ज़्यादा ओरिएंटेशन और कॉन्फ़िगरेशन में बदलाव सही तरीके से करता है, तो इस समस्या से बचा जा सकता है. बड़ी स्क्रीन के लिए ऐप्लिकेशन की क्वालिटी से जुड़े दिशा-निर्देशों का पालन करके, अपने ऐप्लिकेशन को बड़ी स्क्रीन के लिए तैयार करें.
अगर Unity गेम इंजन का इस्तेमाल किया जा रहा है, तो उसे 2019.4.40 या इसके बाद के वर्शन पर अपग्रेड करें और फिर से गेम एक्सपोर्ट करें. Android Player की सेटिंग में, Resizable Window
विकल्प पर सही का निशान लगाएं.
बदलाव की सुविधा को बंद करने या उससे ऑप्ट आउट करने का तरीका
प्रॉपर्टी फ़्लैग PROPERTY_COMPAT_ENABLE_FAKE_FOCUS
को false
पर सेट करें.
बदलाव करने के लिए प्रॉपर्टी फ़्लैग
<property android:name="android.window.PROPERTY_COMPAT_ENABLE_FAKE_FOCUS"
android:value="true|false"/>
बदलाव की जांच करने के लिए adb कमांड
बदलाव लागू करने के लिए:
adb shell am compat enable OVERRIDE_ENABLE_COMPAT_FAKE_FOCUS <package>
बदलाव को हटाने के लिए:
adb shell am compat disable OVERRIDE_ENABLE_COMPAT_FAKE_FOCUS <package>
ध्यान दें: निर्देश सिर्फ़ कुछ समय के लिए लागू होते हैं या ओवरराइड को हटाते हैं.
अन्य संसाधन
- बड़ी स्क्रीन के लिए ऐप्लिकेशन की क्वालिटी से जुड़े दिशा-निर्देश
- ऐप्लिकेशन की मुख्य क्वालिटी के लिए दिशा-निर्देश