डिवाइस के साथ काम करने वाला मोड

Android, उन ऐप्लिकेशन के लिए कंपैटिबिलिटी मोड चालू करता है जो ओरिएंटेशन या साइज़ बदलने से जुड़ी पाबंदियों के बारे में बताते हैं. कंपैटिबिलिटी मोड यह पक्का करता है कि ऐप्लिकेशन, बड़ी स्क्रीन वाले डिवाइसों और फ़ोल्ड किए जा सकने वाले फ़्लिप फ़ोन पर ठीक से काम करे. हालांकि, इस मोड में ऐप्लिकेशन को इस्तेमाल करना उतना आसान नहीं होता.

हर ऐप्लिकेशन के लिए अलग-अलग सेटिंग की सुविधा की मदद से, डिवाइस बनाने वाली कंपनियां, वर्चुअल डिवाइस के मालिक1, और उपयोगकर्ता, ऐप्लिकेशन के लेआउट को बेहतर बनाने या कुछ डिवाइसों पर ऐप्लिकेशन को क्रैश होने से रोकने के लिए, ऐप्लिकेशन के व्यवहार में बदलाव कर सकते हैं.

Android 16

Android 16 (एपीआई लेवल 36) में, स्क्रीन ओरिएंटेशन, आसपेक्ट रेशियो (लंबाई-चौड़ाई का अनुपात), और ऐप्लिकेशन के साइज़ को बदलने से जुड़ी पाबंदियों को अनदेखा किया जाता है. ऐसा इसलिए किया जाता है, ताकि 600dp से ज़्यादा चौड़ाई वाले डिवाइसों पर ऐप्लिकेशन का लेआउट बेहतर बनाया जा सके.

एपीआई लेवल 36 को टारगेट करने वाले ऐप्लिकेशन के लिए, ऐप्लिकेशन के हिसाब से तय किए गए ये ओवरराइड काम नहीं करते:

ऑप्ट आउट करें

आपका ऐप्लिकेशन एपीआई लेवल 36 को टारगेट कर सकता है, लेकिन Android 16 के व्यवहार से ऑप्ट आउट कर सकता है. ऐसे में, OVERRIDE_ANY_ORIENTATION_TO_USER लागू नहीं होता.

मेनिफ़ेस्ट प्रॉपर्टी के बारे में जानकारी देना

एपीआई लेवल 36 के व्यवहार से ऑप्ट आउट करने के लिए, PROPERTY_COMPAT_ALLOW_RESTRICTED_RESIZABILITY मेनिफ़ेस्ट प्रॉपर्टी का एलान करें.

किसी खास गतिविधि के लिए ऑप्ट आउट करने के लिए, <activity> एलिमेंट में प्रॉपर्टी सेट करें:

<activity ...>
    <property
        android:name="android.window.PROPERTY_COMPAT_ALLOW_RESTRICTED_RESIZABILITY"
        android:value="true" />
    ...
</activity>

अपने पूरे ऐप्लिकेशन के लिए ऑप्ट आउट करने के लिए, <application> एलिमेंट में प्रॉपर्टी सेट करें:

<application ...>
    <property
        android:name="android.window.PROPERTY_COMPAT_ALLOW_RESTRICTED_RESIZABILITY"
        android:value="true" />
    ...
</application>

रेफ़रंस डिवाइस

यहां दिए गए डिवाइसों के लिए, ऐप्लिकेशन के हिसाब से सेटिंग में बदलाव करने की ज़रूरत पड़ सकती है. ऐसा इसलिए, क्योंकि इनमें असामान्य कॉन्फ़िगरेशन होते हैं या ऐसे कॉन्फ़िगरेशन होते हैं जो ऐप्लिकेशन के साथ ठीक से काम नहीं करते:

  • टैबलेट: कुछ टैबलेट, जैसे कि 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, उन ऐप्लिकेशन के लिए साइज़ कंपैटबिलिटी मोड चालू करता है जिनका साइज़ बदला नहीं जा सकता. जब कोई ऐक्टिविटी ऐसे डिसप्ले कंटेनर में जाती है जो ऐक्टिविटी के डाइमेंशन के साथ काम नहीं करता है, तो सिस्टम ऐप्लिकेशन को फिर से स्केल कर सकता है, ताकि वह डिवाइस के डिसप्ले को कम से कम एक डाइमेंशन में भर सके.

डिवाइस के कॉन्फ़िगरेशन में किए गए इन बदलावों की वजह से, साइज़ के हिसाब से काम करने वाला मोड चालू हो सकता है:

  • डिवाइस को घुमाना
  • फ़ोल्ड किए जा सकने वाले डिवाइस को फ़ोल्ड या अनफ़ोल्ड किया जा रहा है
  • फ़ुल स्क्रीन और स्प्लिट-स्क्रीन डिसप्ले मोड के बीच स्विच करना

समस्या

आम तौर पर, साइज़ कंपैटिबिलिटी मोड उन गतिविधियों पर लागू होता है जिनके ओरिएंटेशन या आसपेक्ट रेशियो पर पाबंदी होती है. साथ ही, जिन्हें सिस्टम के हिसाब से कॉन्फ़िगर किया जाता है या सिस्टम यह तय करता है कि उनका साइज़ बदला नहीं जा सकता.

अगर आपका ऐप्लिकेशन इनमें से कोई भी शर्त पूरी करता है, तो उसे फिर से साइज़ में बदलने की सुविधा वाला ऐप्लिकेशन माना जाएगा. साथ ही, उसे साइज़ के हिसाब से काम करने वाले मोड में नहीं रखा जाएगा:

अगर आपका ऐप्लिकेशन इनमें से किसी भी शर्त को पूरा नहीं करता है, तो उसे रीसाइज़ नहीं किया जा सकता. साथ ही, उसे साइज़ के हिसाब से काम करने वाले मोड में रखा जा सकता है.

ऑप्टिमाइज़ेशन

ऐप्लिकेशन, सभी डिसप्ले साइज़ के साथ काम करना चाहिए. ऐप्लिकेशन के मेनिफ़ेस्ट में, <activity> या <application> एलिमेंट के android:resizeableActivity एट्रिब्यूट को true पर सेट करके, ऐप्लिकेशन का साइज़ बदलने की सुविधा चालू करें. अपने ऐप्लिकेशन के लिए रिस्पॉन्सिव/अडैप्टिव लेआउट डिज़ाइन करें. ज़्यादा जानकारी के लिए, अलग-अलग डिसप्ले साइज़ के लिए सहायता उपलब्ध कराना और मल्टी-विंडो मोड के लिए सहायता उपलब्ध कराना लेख पढ़ें.

कंपैटिबिलिटी से जुड़ी समस्या को हल करने का तरीका

जब सिस्टम को यह पता चलता है कि लेटरबॉक्स मोड में चल रहे ऐप्लिकेशन को किसी एक डाइमेंशन में डिस्प्ले विंडो को भरने के लिए, ऐप्लिकेशन का साइज़ बदलकर बेहतर बनाया जा सकता है, तो Android ऐप्लिकेशन को साइज़ कंपैटबिलिटी मोड में डाल देता है. सिस्टम, रीस्टार्ट करने का कंट्रोल दिखाता है. इससे ऐप्लिकेशन की प्रोसेस फिर से शुरू होती है, गतिविधि फिर से शुरू होती है, और डिसप्ले फिर से रेंडर होता है. प्रोसेस और थ्रेड की खास जानकारी भी देखें.

डिसप्ले कंपैटबिलिटी मोड

डिसप्ले कंपैटिबिलिटी मोड की मदद से, ऐप्लिकेशन को अलग-अलग डिसप्ले के बीच ले जाने पर उसे रीस्टार्ट होने से रोका जा सकता है. इससे कॉन्फ़िगरेशन में बदलाव नहीं होता. जैसे, कलर मोड, टचस्क्रीन की उपलब्धता या स्क्रीन डेंसिटी में बदलाव नहीं होता.

स्टेबिलिटी और कंटिन्यूटी को बेहतर बनाने के लिए, गेम के लिए डिसप्ले कंपैटबिलिटी मोड डिफ़ॉल्ट रूप से चालू होता है. यह android:appCategory फ़्लैग पर आधारित होता है. साइज़ कंपैटबिलिटी मोड के उलट, डिसप्ले कंपैटबिलिटी मोड में ऐप्लिकेशन का कॉन्फ़िगरेशन फ़्रीज़ नहीं होता. ऐप्लिकेशन को अब भी onConfigurationChanged() कॉलबैक जैसे एपीआई के ज़रिए, कॉन्फ़िगरेशन से जुड़े सभी अपडेट मिल सकते हैं. हालांकि, इसे बार-बार रीस्टार्ट करने की ज़रूरत नहीं होगी. इसका मतलब है कि जो गेम onConfigurationChanged() जैसे एपीआई के साथ ठीक से काम करते हैं वे डिसप्ले कंपैटिबिलिटी मोड में होने पर भी, अपने यूज़र इंटरफ़ेस (यूआई) को अपडेट कर सकते हैं.

डिसप्ले कंपैटिबिलिटी मोड से ऑप्ट आउट करने और अपने ऐप्लिकेशन में कॉन्फ़िगरेशन में हुए बदलावों को मैनेज करने के लिए, ऐप्लिकेशन की AndroidManifest.xml फ़ाइल में कॉन्फ़िगरेशन में हुए बदलावों के लिए सहायता का एलान करें. साथ ही, onConfigurationChanged() कॉलबैक में कॉन्फ़िगरेशन में हुए बदलावों को मैनेज करें.

<activity
    android:name=".MyGameActivity"
    android:configChanges="colorMode|touchscreen|density|...">
    ...
</activity>

झिलमिलाते लूप

जब कोई ऐप्लिकेशन, डिसप्ले के सभी ओरिएंटेशन के साथ काम नहीं करता है, तो कॉन्फ़िगरेशन में बदलाव होने पर वह बार-बार नए ओरिएंटेशन का अनुरोध कर सकता है. इससे एक ऐसा लूप बन जाता है जो कभी खत्म नहीं होता. इस वजह से, डिसप्ले फ़्लिकर करता है या ऐप्लिकेशन लगातार रोटेट होता रहता है.

समस्या

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) को कॉल कर सकता है, और इनफ़िनिट लूप को जारी रख सकता है.

ऑप्टिमाइज़ेशन

ऐप्लिकेशन को ये काम नहीं करने चाहिए:

  • activity 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 कंपैटबिलिटी डेफ़िनिशन डॉक्यूमेंट में बताया गया है कि कैमरा इमेज सेंसर "को इस तरह से ओरिएंट किया जाना चाहिए कि कैमरे का लंबा डाइमेंशन, स्क्रीन के लंबे डाइमेंशन के साथ अलाइन हो."

ऐप्लिकेशन अक्सर यह मान लेते हैं कि डिवाइस और कैमरे के सेंसर का ओरिएंटेशन पोर्ट्रेट मोड में है. यह अनुमान, सामान्य मोबाइल फ़ोन के लिए सही होता है. हालांकि, टैबलेट और लैपटॉप का ओरिएंटेशन और उनके कैमरा सेंसर लैंडस्केप मोड में हो सकते हैं. इसके अलावा, फ़ोल्ड किए जा सकने वाले फ़ोन जैसे नए फ़ॉर्म फ़ैक्टर में, कई नैचुरल ओरिएंटेशन और अलग-अलग ओरिएंटेशन में कई कैमरा सेंसर हो सकते हैं.

कैमरे को ऐसे ओरिएंटेशन में रखकर गतिविधि शुरू करने से, ऐप्लिकेशन को उम्मीद नहीं होती या अलग-अलग कैमरों या डिवाइस की स्क्रीन (फ़ोल्ड किए जा सकने वाले डिवाइसों के लिए) के बीच स्विच करने से, कैमरा प्रीव्यू गलत तरीके से अलाइन हो सकता है या उसमें गड़बड़ी हो सकती है.

ऑप्टिमाइज़ेशन

कैमरा ऐप्लिकेशन को डिवाइस और कैमरा सेंसर के ओरिएंटेशन की सही पहचान करनी चाहिए. साथ ही, उन्हें मैनेज करना चाहिए, ताकि कैमरा प्रीव्यू को सही तरीके से अलाइन और स्केल किया जा सके. ऐप्लिकेशन को डिवाइस के रोटेशन, सेंसर के रोटेशन, और स्क्रीन या विंडो के आसपेक्ट रेशियो का हिसाब लगाना होगा. इसके बाद, नतीजों को कैमरे की झलक पर लागू करना होगा. ज़्यादा जानकारी के लिए, कैमरे की झलक और पेश है कैमरा व्यूफ़ाइंडर लेख पढ़ें.

कंपैटिबिलिटी से जुड़ी समस्या को हल करने का तरीका

जब 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 में मल्टी‑विंडो मोड और फ़ोल्ड किए जा सकने वाले डिवाइसों जैसी सुविधाओं के लिए सपोर्ट जोड़ा गया है. इसलिए, लेगसी एपीआई को बंद कर दिया गया है और उनकी जगह अप‑टू‑डेट एपीआई का इस्तेमाल किया जा रहा है. ये एपीआई, डिसप्ले के सभी साइज़ और डिवाइस के फ़ॉर्म फ़ैक्टर के लिए काम करते हैं. हालांकि, बंद किए गए एपीआई अब भी पुराने सिस्टम के साथ काम करते हैं.

कुछ View एपीआई खास मकसद के लिए डिज़ाइन किए गए हैं. डेवलपर को इनके बारे में हमेशा अच्छी तरह से जानकारी नहीं होती.

समस्या

डेवलपर, अब काम न करने वाले Display एपीआई का इस्तेमाल करते हैं. साथ ही, वे यह गलत मान लेते हैं कि एपीआई, डिवाइस की डिसप्ले एरिया की सीमाओं के बजाय ऐप्लिकेशन की सीमाओं को दिखाते हैं. इसके अलावा, डेवलपर सामान्य डिसप्ले मेट्रिक पाने के लिए, गलती से खास मकसद वाले व्यू एपीआई का इस्तेमाल करते हैं. ऐप्लिकेशन विंडो का साइज़ बदलने के बाद, यूज़र इंटरफ़ेस (यूआई) एलिमेंट की पोज़िशन बदलने पर, गलत कैलकुलेशन होती हैं. इससे लेआउट से जुड़ी समस्याएं होती हैं.

पाबंदी वाले और आम तौर पर गलत तरीके से इस्तेमाल किए जाने वाले Display API:

ज़्यादा जानकारी के लिए, मल्टी-विंडो मोड की सुविधा देखें.

व्यू एपीआई का गलत इस्तेमाल:

ऑप्टिमाइज़ेशन

यूज़र इंटरफ़ेस (यूआई) एलिमेंट की पोज़िशन तय करने के लिए, डिसप्ले के साइज़ पर कभी भी भरोसा न करें. अपने ऐप्लिकेशन को WindowMetrics पर आधारित एपीआई पर माइग्रेट करें. इनमें ये WindowManager एपीआई शामिल हैं:

कंपैटिबिलिटी से जुड़ी समस्या को हल करने का तरीका

दो ओवरराइड, अब काम न करने वाले 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.WRAP_CONTENT का इस्तेमाल करता है, न कि LayoutParams.MATCH_PARENT का.

कंपैटिबिलिटी से जुड़ी समस्या को हल करने का तरीका

डायलॉग बॉक्स वाली गतिविधियों को तब तक दिखाया जाता है, जब तक उपयोगकर्ता डायलॉग बॉक्स का जवाब नहीं दे देता.

सिस्टम यह पक्का करता है कि पारदर्शी गतिविधि में, गतिविधि स्टैक में पारदर्शी गतिविधि के नीचे मौजूद पहली अपारदर्शी गतिविधि की सभी पाबंदियां शामिल हों. इनमें ये पाबंदियां शामिल हैं:

  • साइज़ कंपैटबिलिटी मोड
  • ओरिएंटेशन
  • आसपेक्ट रेशियो

Unity गेम

Unity गेम, Android पर फ़ुल स्क्रीन या मल्टी‑विंडो मोड में चलते हैं. हालांकि, कई Unity गेम में ऐप्लिकेशन को मल्टी-विंडो मोड में रखने पर, फ़ोकस हट जाता है और कॉन्टेंट दिखना बंद हो जाता है.

समस्या

Android पर मल्टी‑विंडो मोड की सुविधा के लिए, Unity ने Unity 2019.4 में Resizable Window विकल्प जोड़ा है. हालांकि, शुरुआत में लागू किए गए इस तरीके से, मल्टी-विंडो मोड में ऐक्टिविटी लाइफ़साइकल पर सही तरीके से प्रतिक्रिया नहीं मिली. इस वजह से, जब ऐप्लिकेशन पर फ़ोकस नहीं किया जाता, तो UnityPlayer वीडियो चलाना बंद कर देता है. खिलाड़ी को काली स्क्रीन या गेम का आखिरी फ़्रीज़ किया गया फ़्रेम दिख रहा है. गेमप्ले को सिर्फ़ तब फिर से शुरू किया गया, जब उपयोगकर्ता ने स्क्रीन पर टैप किया. Unity इंजन का इस्तेमाल करने वाले कई ऐप्लिकेशन को यह समस्या आती है. साथ ही, मल्टी-विंडो मोड में ये ऐप्लिकेशन काली विंडो के तौर पर दिखते हैं.

ऑप्टिमाइज़ेशन

Unity को 2019.4.40 या इसके बाद वाले वर्शन में अपग्रेड करें. इसके बाद, अपने गेम को फिर से एक्सपोर्ट करें. Android Player की सेटिंग में जाकर, Resizable Window विकल्प को चुने हुए के तौर पर मार्क करें. ऐसा न करने पर, गेम पर फ़ोकस न होने पर वह रुक जाएगा. भले ही, गेम मल्टी-विंडो मोड में पूरी तरह से दिख रहा हो.

कंपैटिबिलिटी से जुड़ी समस्या को हल करने का तरीका

डिवाइस बनाने वाली कंपनियां, OVERRIDE_ENABLE_COMPAT_FAKE_FOCUS पर‑ऐप्लिकेशन ओवरराइड लागू कर सकती हैं. इससे मल्टी‑विंडो मोड में किसी ऐप्लिकेशन को फ़ोकस इवेंट की नकली जानकारी दी जा सकती है. बदले गए कॉन्टेंट की वजह से, गतिविधि में कॉन्टेंट को फिर से बनाया जा सकता है और उसे ब्लैक आउट नहीं किया जाता.

डेस्कटॉप विंडोविंग

डेस्कटॉप विंडो मोड में ऐप्लिकेशन चलाने पर, उन्हें कंपैटबिलिटी मोड से जुड़ी अन्य समस्याएं आ सकती हैं.

जिन ऐप्लिकेशन का ओरिएंटेशन लॉक होता है उनका साइज़ आसानी से बदला जा सकता है. अगर किसी गतिविधि को पोर्ट्रेट ओरिएंटेशन में लॉक किया गया है, तो भी उपयोगकर्ता ऐप्लिकेशन का साइज़ बदलकर लैंडस्केप ओरिएंटेशन में कर सकते हैं.

पोर्ट्रेट ऐप्लिकेशन को लैंडस्केप में बदलते हुए दिखाने वाला ऐनिमेशन.

हालांकि, अगर किसी गतिविधि को रीसाइज़ नहीं किया जा सकता (resizeableActivity = false), तो गतिविधि का यूज़र इंटरफ़ेस (यूआई) एक ही आसपेक्ट रेशियो (लंबाई-चौड़ाई का अनुपात) बनाए रखते हुए स्केल होता है.

ऐप्लिकेशन का साइज़ बदलने का ऐनिमेशन. यूज़र इंटरफ़ेस (यूआई), डेस्कटॉप विंडो में फ़िट होने के लिए स्केल होता है.

डेस्कटॉप पर विंडो में कैमरे की झलक देखना

डेस्कटॉप विंडो में ऐप्लिकेशन, कैमरे की झलक दिखाना शुरू करते हैं. इस दौरान, व्यूफ़ाइंडर के यूज़र इंटरफ़ेस (यूआई) को उसके मूल आसपेक्ट रेशियो के हिसाब से स्केल किया जाता है. ऐप्लिकेशन विंडो के बाकी हिस्से का साइज़ अपनी ज़रूरत के हिसाब से बदला जा सकता है.

अपने ऐप्लिकेशन की जांच करके देखें कि वह Android 14 के साथ काम करता है या नहीं

अपने ऐप्लिकेशन को टेस्ट करने और यह समझने के लिए कि यह अलग-अलग डिवाइसों पर कैसे काम करता है, यहां दिए गए संसाधनों का इस्तेमाल करें:

क्या लेटरबॉक्स किया गया है

पुष्टि करें कि हर गतिविधि, ऐप्लिकेशन के लिए उपलब्ध सभी डिसप्ले स्पेस का इस्तेमाल कर सकती है. सबसे पहले, अपने टेस्ट फ़ोल्डर में यह कोड डालें:

Kotlin

fun isLetterboxed(activity: AppCompatActivity): 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(AppCompatActivity 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 {
        assertFalse(it.isLetterboxed())
    }
}

Java

@Rule
public ActivityScenarioRule<MainActivity> rule = new ActivityScenarioRule<>(MainActivity.class);

@Test
public void activity_launched_notLetterBoxed() {
    try (ActivityScenario<MainActivity> scenario =
        ActivityScenario.launch(MainActivity.class)) {
            scenario.onActivity( activity -> {
                assertFalse(activity.isLetterboxed());
            });
        }
}

इस तरह का टेस्ट सिर्फ़ तब तक चलाएं, जब तक यह पास न हो जाए. साथ ही, यह पुष्टि न हो जाए कि आपके ऐप्लिकेशन की गतिविधियां, ऐप्लिकेशन के लिए उपलब्ध पूरी डिसप्ले जगह का इस्तेमाल करती हैं. अपने ऐप्लिकेशन को सभी तरह के डिवाइसों पर टेस्ट करें, ताकि यह पक्का किया जा सके कि वह एक जैसा काम कर रहा है.

हर ऐप्लिकेशन के हिसाब से ओवरराइड

Android, ऐप्लिकेशन के कॉन्फ़िगर किए गए व्यवहार में बदलाव करने के लिए, ओवरराइड उपलब्ध कराता है. उदाहरण के लिए, FORCE_RESIZE_APP ओवरराइड, सिस्टम को साइज़ कंपैटबिलिटी मोड को बायपास करने का निर्देश देता है. साथ ही, ऐप्लिकेशन को डिसप्ले डाइमेंशन के हिसाब से फिर से साइज़ करने का निर्देश देता है. भले ही, ऐप्लिकेशन मेनिफ़ेस्ट में resizeableActivity="false" तय किया गया हो.

डिवाइस बनाने वाली कंपनियां, बड़ी स्क्रीन वाले कुछ डिवाइसों पर कुछ ऐप्लिकेशन या सभी ऐप्लिकेशन के लिए, स्टाइल में बदलाव करती हैं. Android 14 (एपीआई लेवल 34) और इसके बाद के वर्शन पर, उपयोगकर्ता डिवाइस की सेटिंग में जाकर ऐप्लिकेशन के लिए ओवरराइड लागू कर सकते हैं. Android 16 (एपीआई लेवल 36) और इसके बाद के वर्शन में, वर्चुअल डिवाइस के मालिक, वर्चुअल डिवाइस के उन मालिकों के चुने गए डिवाइसों पर ओवरराइड लागू करते हैं जिन्हें वर्चुअल डिवाइस के मालिक मैनेज करते हैं.

उपयोगकर्ता के हिसाब से, हर ऐप्लिकेशन के लिए ओवरराइड की गई सेटिंग

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 पर सेट करने से कोई असर नहीं पड़ता.

अपने ऐप्लिकेशन को सभी स्क्रीन के लिए ऑप्टिमाइज़ करें: अपने ऐप्लिकेशन में आसपेक्ट रेशियो (लंबाई-चौड़ाई का अनुपात) से जुड़ी पाबंदियां न लगाएं. डिसप्ले के लिए उपलब्ध जगह के आधार पर अलग-अलग लेआउट इस्तेमाल करने के लिए, विंडो साइज़ क्लास का इस्तेमाल करें.

हर ऐप्लिकेशन के हिसाब से डिवाइस की सेटिंग बदलना

डिवाइस बनाने वाली कंपनियां और वर्चुअल डिवाइस के मालिक (भरोसेमंद और खास ऐप्लिकेशन चुनें), कुछ डिवाइसों पर हर ऐप्लिकेशन के हिसाब से ओवरराइड लागू करते हैं. इनमें टैबलेट, फ़ोल्ड किए जा सकने वाले डिवाइस, ChromeOS डिवाइस, और कार डिसप्ले शामिल हैं. रेफ़रंस डिवाइसों पर, डिफ़ॉल्ट रूप से कई ऐप्लिकेशन के लिए कुछ ओवरराइड लागू हो सकते हैं.

ऐप्लिकेशन, ज़्यादातर ओवरराइड से ऑप्ट आउट कर सकते हैं. इसके लिए, यहां दी गई हर ऐप्लिकेशन के लिए ओवरराइड टेबल देखें.

कंपैटिबिलिटी फ़्रेमवर्क का इस्तेमाल करके, अपने ऐप्लिकेशन की जांच की जा सकती है. इसके लिए, ओवरराइड की सुविधा चालू या बंद की जा सकती है. कंपैटिबिलिटी फ़्रेमवर्क टूल देखें. इस सुविधा को चालू करने पर, पूरी तरह से बदले गए ऐप्लिकेशन पर ये सेटिंग लागू होती हैं.

Android डीबग ब्रिज (adb) का इस्तेमाल करके भी, ओवरराइड चालू या बंद किए जा सकते हैं. साथ ही, यह तय किया जा सकता है कि आपके ऐप्लिकेशन पर कौनसे ओवरराइड लागू होंगे.

इस तरह से, बदलाव करने की सुविधा चालू या बंद करें:

adb shell am compat enable/disable <override name/id> <package>

रेफ़रंस डिवाइसों के लिए, देखें कि आपके ऐप्लिकेशन पर कौनसे ओवरराइड लागू होते हैं:

adb shell dumpsys platform_compat | grep <package name>

यहां दी गई टेबल में, उपलब्ध ओवरराइड की सूची दी गई है. साथ ही, इसमें यह भी बताया गया है कि अपने ऐप्लिकेशन को कैसे ऑप्टिमाइज़ करें, ताकि ऐप्लिकेशन को ओवरराइड पर निर्भर न रहना पड़े. कुछ ओवरराइड से ऑप्ट आउट करने के लिए, अपने ऐप्लिकेशन के मेनिफ़ेस्ट में प्रॉपर्टी फ़्लैग जोड़े जा सकते हैं.

हर ऐप्लिकेशन के हिसाब से ओवरराइड
टाइप नाम ID ब्यौरा
साइज़ बदलने की सुविधा 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_SMALL 349045028 इससे कम से कम आसपेक्ट रेशियो (लंबाई-चौड़ाई का अनुपात) को 4:3 पर सेट किया जाता है.
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_REQUESTED_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_DISABLE_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 पर सेट करें.

ऐप्लिकेशन को ऑप्टिमाइज़ करने का तरीका

रिस्पॉन्सिव/अडैप्टिव लेआउट का इस्तेमाल करें, ताकि ऐप्लिकेशन सभी डिसप्ले साइज़ और आसपेक्ट रेशियो (लंबाई-चौड़ाई का अनुपात) के हिसाब से अडजस्ट हो सकें. अलग-अलग डिसप्ले साइज़ के साथ काम करना लेख पढ़ें.

बदलाव करने की सुविधा को बंद करने या इससे ऑप्ट आउट करने का तरीका

प्रॉपर्टी फ़्लैग 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 सेट करें.

ऐप्लिकेशन को ऑप्टिमाइज़ करने का तरीका

अपने ऐप्लिकेशन में आसपेक्ट रेशियो से जुड़ी पाबंदियां सेट न करें. पक्का करें कि आपका ऐप्लिकेशन अलग-अलग डिसप्ले साइज़ के साथ काम करता हो. विंडो के साइज़ के हिसाब से क्लास का इस्तेमाल करें, ताकि स्क्रीन पर आपके ऐप्लिकेशन के लिए उपलब्ध जगह के आधार पर अलग-अलग लेआउट काम कर सकें. Compose WindowSizeClass API और View WindowSizeClass API देखें.

बदलाव करने की सुविधा को बंद करने या इससे ऑप्ट आउट करने का तरीका

आस्पेक्ट रेशियो से जुड़ी पाबंदी तय करें या प्रॉपर्टी फ़्लैग 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_SMALL

गतिविधि के कम से कम आसपेक्ट रेशियो को छोटी वैल्यू (4:3) पर सेट करता है.

ऐप्लिकेशन, ओवरराइड करने जैसा नतीजा कैसे पा सकते हैं

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_SMALL <package>

ओवरराइड हटाने के लिए:

adb shell am compat disable OVERRIDE_MIN_ASPECT_RATIO_SMALL <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

इससे ओरिएंटेशन को बदलने के लिए, यहां दी गई सेटिंग को बदलने की अनुमति मिलती है:

ऐप्लिकेशन, ओवरराइड करने जैसा नतीजा कैसे पा सकते हैं

activity:screenOrientation मेनिफ़ेस्ट एट्रिब्यूट सेट करें या Activity#setRequestedOrientation() एपीआई का इस्तेमाल करें.

ऐप्लिकेशन को ऑप्टिमाइज़ करने का तरीका

आपके ऐप्लिकेशन में सभी ओरिएंटेशन काम करने चाहिए. ओरिएंटेशन में बदलाव, कॉन्फ़िगरेशन में बदलाव होता है. इसे दो तरीकों से मैनेज किया जा सकता है: सिस्टम को ऐप्लिकेशन को खत्म करने और फिर से बनाने की अनुमति देकर या कॉन्फ़िगरेशन में होने वाले बदलावों को खुद मैनेज करके. अगर कॉन्फ़िगरेशन में होने वाले बदलावों को खुद मैनेज किया जाता है, तो ViewModel का इस्तेमाल करके ऐप्लिकेशन की स्थिति को बनाए रखा जा सकता है. बहुत कम मामलों में, सिर्फ़ छोटी स्क्रीन पर ओरिएंटेशन को लॉक किया जा सकता है. हालांकि, ऐसा करने से ऐप्लिकेशन को उतना बेहतर तरीके से स्केल नहीं किया जा सकेगा जितना उपयोगकर्ता को अपनी ज़रूरत के हिसाब से ऐप्लिकेशन को घुमाने की अनुमति देने पर किया जा सकता है. Android 12L और इसके बाद के वर्शन में, डिवाइस के कॉन्फ़िगरेशन के हिसाब से ओरिएंटेशन को बदला जा सकता है. कॉन्फ़िगरेशन में हुए बदलावों को मैनेज करने और सभी ओरिएंटेशन के साथ काम करने के बारे में ज़्यादा जानने के लिए, कॉन्फ़िगरेशन में हुए बदलावों को मैनेज करना, ViewModel की खास जानकारी, और फ़ोन पर ऐप्लिकेशन के ओरिएंटेशन को सीमित करना, लेकिन बड़ी स्क्रीन वाले डिवाइसों पर नहीं लेख पढ़ें.

बदलाव करने की सुविधा को बंद करने या इससे ऑप्ट आउट करने का तरीका

प्रॉपर्टी फ़्लैग PROPERTY_COMPAT_ALLOW_ORIENTATION_OVERRIDE को 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() या Activity#getRequestedOrientation() पर किए गए कॉल को भी अनदेखा करता है.

ऐप्लिकेशन, ओवरराइड करने जैसा नतीजा कैसे पा सकते हैं

  • 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

इस विकल्प को चालू करने पर, पैकेज में मौजूद सभी गतिविधियों के लिए reverseLandscape ओरिएंटेशन चालू हो जाता है. जब तक 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() को कॉल कर रहा हो और ऐप्लिकेशन रिलॉन्च हो रहा हो या उसमें कैमरे के साथ काम करने से जुड़ी सुविधा चालू हो.

ऐप्लिकेशन, ओवरराइड करने जैसा नतीजा कैसे पा सकते हैं

प्रॉपर्टी फ़्लैग PROPERTY_COMPAT_IGNORE_REQUESTED_ORIENTATION को true पर सेट करें.

ऐप्लिकेशन को ऑप्टिमाइज़ करने का तरीका

OVERRIDE_ANY_ORIENTATION देखें.

बदलाव करने की सुविधा को बंद करने या इससे ऑप्ट आउट करने का तरीका

प्रॉपर्टी फ़्लैग PROPERTY_COMPAT_IGNORE_REQUESTED_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_REQUESTED_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 एपीआई, डिसप्ले एरिया की सीमाओं के बारे में जानकारी देते रहेंगे.

ऐप्लिकेशन, ओवरराइड करने जैसा नतीजा कैसे पा सकते हैं

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>

ध्यान दें: इन कमांड से, सिर्फ़ कुछ समय के लिए ओवरराइड लागू या हटाया जाता है.

OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION

यह कुकी, फ़ोर्स रोटेशन की सुविधा बंद करती है. इससे कुछ ऐप्लिकेशन पर उपयोगकर्ता अनुभव बेहतर होता है.

ऐप्लिकेशन, ओवरराइड करने जैसा नतीजा कैसे पा सकते हैं

प्रॉपर्टी फ़्लैग PROPERTY_CAMERA_COMPAT_ALLOW_FORCE_ROTATION को 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_DISABLE_REFRESH

स्क्रीन को ज़बरदस्ती घुमाने के बाद, गतिविधि को रीफ़्रेश करने की सुविधा बंद कर देता है. इससे ऐप्लिकेशन में रीफ़्रेश करने पर, उपयोगकर्ताओं को बेहतर अनुभव मिलता है.

ऐप्लिकेशन, ओवरराइड करने जैसा नतीजा कैसे पा सकते हैं

प्रॉपर्टी फ़्लैग PROPERTY_CAMERA_COMPAT_ALLOW_REFRESH को false पर सेट करें.

ऐप्लिकेशन को ऑप्टिमाइज़ करने का तरीका

OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION देखें.

बदलाव करने की सुविधा को बंद करने या इससे ऑप्ट आउट करने का तरीका

प्रॉपर्टी फ़्लैग PROPERTY_CAMERA_COMPAT_ALLOW_REFRESH को 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 देखें.

बदलाव करने की सुविधा को बंद करने या इससे ऑप्ट आउट करने का तरीका

प्रॉपर्टी फ़्लैग PROPERTY_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE को 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_DISABLE_FORCE_ROTATION देखें.

बदलाव करने की सुविधा को बंद करने या इससे ऑप्ट आउट करने का तरीका

प्रॉपर्टी फ़्लैग PROPERTY_COMPAT_OVERRIDE_LANDSCAPE_TO_PORTRAIT को 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_DISABLE_MEDIA_PROJECTION_SINGLE_APP_OPTION

यह ऐप्लिकेशन को, ऐप्लिकेशन की स्क्रीन शेयर करने की सुविधा से ऑप्ट आउट करने से रोकता है. इसके बारे में जानने के लिए, मीडिया प्रोजेक्शन देखें. इस नीति का उल्लंघन तब होता है, जब ऐप्लिकेशन createConfigForDefaultDisplay() एपीआई का गलत इस्तेमाल करते हैं. ऐसा तब होता है, जब वे फ़ुल-स्क्रीन कैप्चर करने के लिए मजबूर करते हैं और सूचनाओं का कॉन्टेंट दिखाकर, उपयोगकर्ता की निजता को खतरे में डालते हैं. सूचनाओं को फ़ुल-स्क्रीन में कैप्चर किया जाता है, लेकिन ऐप्लिकेशन की स्क्रीन शेयर नहीं की जाती. साथ ही, सभी ऐप्लिकेशन विंडोइंग मोड के बावजूद ऐसा करते हैं.

ऐप्लिकेशन, ओवरराइड करने जैसा नतीजा कैसे पा सकते हैं

मीडिया प्रोजेक्शन के डिफ़ॉल्ट व्यवहार की अनुमति दें. इसे Android 14, API लेवल 34 में createScreenCaptureIntent() के साथ लागू किया गया है. इससे उपयोगकर्ता यह तय कर पाते हैं कि उन्हें पूरी स्क्रीन शेयर करनी है या किसी एक ऐप्लिकेशन की विंडो, भले ही विंडोइंग मोड कुछ भी हो. इसके अलावा, createConfigForUserChoice() को कॉल करने पर मिले MediaProjectionConfig आर्ग्युमेंट के साथ createScreenCaptureIntent(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 की सेटिंग में, रीसाइज़ की जा सकने वाली विंडो विकल्प को चालू रखें.

बदलाव करने की सुविधा को बंद करने या इससे ऑप्ट आउट करने का तरीका

प्रॉपर्टी फ़्लैग 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>

ध्यान दें: इन कमांड से, सिर्फ़ कुछ समय के लिए ओवरराइड लागू या हटाया जाता है.

OVERRIDE_EXCLUDE_CAPTION_INSETS_FROM_APP_BOUNDS

ओवरराइड चालू होने पर, गतिविधि को कैप्शन बार इनसेट के साथ कॉन्फ़िगरेशन मिलता है. आम तौर पर, कैप्शन बार के इनसेट, कॉन्फ़िगरेशन से अलग होते हैं.

ऐप्लिकेशन, ओवरराइड करने जैसा नतीजा कैसे पा सकते हैं

एज‑टू‑एज डिसप्ले की सेटिंग चालू करें या ऐप्लिकेशन के टारगेट एसडीके को एपीआई लेवल 35 या उसके बाद के लेवल पर अपडेट करें. यहां दिया गया उदाहरण देखें:

ऐप्लिकेशन को ऑप्टिमाइज़ करने का तरीका

अगर आपका ऐप्लिकेशन, एज-टू-एज डिसप्ले की सुविधा चालू करता है या एपीआई लेवल 35 या उसके बाद के वर्शन को टारगेट करता है, तो इस समस्या से बचा जा सकता है.

बदलाव करने की सुविधा को बंद करने या इससे ऑप्ट आउट करने का तरीका

एज‑टू‑एज डिसप्ले की सेटिंग चालू करें या एपीआई लेवल 35 या उसके बाद के लेवल को टारगेट करें.

बदलाव को खारिज करने के लिए प्रॉपर्टी फ़्लैग

कोई नहीं.

adb कमांड का इस्तेमाल करके, ओवरराइड की सुविधा की जांच करना

ओवरराइड लागू करने के लिए:

adb shell am compat enable OVERRIDE_EXCLUDE_CAPTION_INSETS_FROM_APP_BOUNDS <package>

ओवरराइड हटाने के लिए:

adb shell am compat disable OVERRIDE_EXCLUDE_CAPTION_INSETS_FROM_APP_BOUNDS <package>

ध्यान दें: इन कमांड से, सिर्फ़ कुछ समय के लिए ओवरराइड लागू या हटाया जाता है.

अन्य संसाधन


  1. वर्चुअल डिवाइस का मालिक, एक भरोसेमंद या खास अधिकारों वाला ऐप्लिकेशन होता है. यह वर्चुअल डिवाइस को मैनेज करता है. वर्चुअल डिवाइस के मालिक, ऐप्लिकेशन रेंडर करने के लिए वर्चुअल डिवाइस बनाते हैं. इसके बाद, वे ऐप्लिकेशन को रिमोट डिवाइसों पर प्रोजेक्ट करते हैं. जैसे, निजी कंप्यूटर, वर्चुअल रिएलिटी वाले डिवाइस या कार के इन्फ़ोटेनमेंट सिस्टम. वर्चुअल डिवाइस का मालिक, फ़ोन जैसे किसी लोकल डिवाइस पर है.