Android, उन ऐप्लिकेशन के लिए कंपैटबिलिटी मोड चालू करता है जो ओरिएंटेशन या साइज़ बदलने से जुड़ी पाबंदियों के बारे में बताते हैं. कंपैटिबिलिटी मोड यह पक्का करता है कि ऐप्लिकेशन, बड़ी स्क्रीन वाले डिवाइसों, फ़ोल्ड किए जा सकने वाले फ़्लिप फ़ोन, और डेस्कटॉप एनवायरमेंट पर ठीक से काम करे. हालांकि, इससे ऐप्लिकेशन का इस्तेमाल करने का अनुभव बेहतर नहीं होता.
हर ऐप्लिकेशन के लिए अलग-अलग सेटिंग की सुविधा की मदद से, डिवाइस बनाने वाली कंपनियां, वर्चुअल डिवाइस के मालिक1, और उपयोगकर्ता, ऐप्लिकेशन के लेआउट को बेहतर बनाने या कुछ डिवाइसों पर ऐप्लिकेशन को क्रैश होने से रोकने के लिए, ऐप्लिकेशन के व्यवहार में बदलाव कर सकते हैं.
Android 16
Android 16 (एपीआई लेवल 36) में, स्क्रीन ओरिएंटेशन, आसपेक्ट रेशियो (लंबाई-चौड़ाई का अनुपात), और ऐप्लिकेशन के साइज़ को बदलने से जुड़ी पाबंदियों को अनदेखा किया जाता है. ऐसा इसलिए किया जाता है, ताकि 600dp से ज़्यादा चौड़ाई वाले डिवाइसों पर ऐप्लिकेशन का लेआउट बेहतर बनाया जा सके.
एपीआई लेवल 36 को टारगेट करने वाले ऐप्लिकेशन के लिए, ऐप्लिकेशन के हिसाब से तय की गई ये सेटिंग काम नहीं करती हैं:
- FORCE_RESIZE_APP
- FORCE_NON_RESIZE_APP
- OVERRIDE_MIN_ASPECT_RATIO
- OVERRIDE_MIN_ASPECT_RATIO_PORTRAIT_ONLY
- OVERRIDE_MIN_ASPECT_RATIO_MEDIUM
- OVERRIDE_MIN_ASPECT_RATIO_LARGE
- OVERRIDE_MIN_ASPECT_RATIO_TO_ALIGN_WITH_SPLIT_SCREEN
- OVERRIDE_MIN_ASPECT_RATIO_EXCLUDE_PORTRAIT_FULLSCREEN
- OVERRIDE_ANY_ORIENTATION
- OVERRIDE_ANY_ORIENTATION_TO_USER
- OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT
- OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR
- OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE
- OVERRIDE_ORIENTATION_ONLY_FOR_CAMERA
- OVERRIDE_USE_DISPLAY_LANDSCAPE_NATURAL_ORIENTATION
- OVERRIDE_ENABLE_COMPAT_IGNORE_REQUESTED_ORIENTATION
- OVERRIDE_ENABLE_COMPAT_IGNORE_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED
- OVERRIDE_RESPECT_REQUESTED_ORIENTATION
- OVERRIDE_EXCLUDE_CAPTION_INSETS_FROM_APP_BOUNDS
ऑप्ट आउट करें
आपका ऐप्लिकेशन एपीआई लेवल 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, उन ऐप्लिकेशन के लिए साइज़ कंपैटबिलिटी मोड चालू करता है जिनका साइज़ बदला नहीं जा सकता. जब कोई गतिविधि ऐसे डिसप्ले कंटेनर में ले जाई जाती है जो गतिविधि के डाइमेंशन के साथ काम नहीं करता है, तो सिस्टम ऐप्लिकेशन को फिर से स्केल कर सकता है, ताकि वह डिवाइस के डिसप्ले को कम से कम एक डाइमेंशन में भर सके.
डिवाइस के कॉन्फ़िगरेशन में किए गए इन बदलावों की वजह से, साइज़ के हिसाब से काम करने वाले मोड को ट्रिगर किया जा सकता है:
- डिवाइस को घुमाना
- फ़ोल्ड किए जा सकने वाले डिवाइस को फ़ोल्ड या अनफ़ोल्ड किया जा रहा है
- फ़ुल स्क्रीन और स्प्लिट-स्क्रीन डिसप्ले मोड के बीच स्विच करना
समस्या
आम तौर पर, साइज़ के साथ काम करने वाला मोड उन गतिविधियों पर लागू होता है जिन पर ओरिएंटेशन या आसपेक्ट रेशियो से जुड़ी पाबंदियां होती हैं. साथ ही, इन्हें इस तरह कॉन्फ़िगर किया जाता है कि इनका साइज़ बदला न जा सके. हालांकि, सिस्टम भी यह तय कर सकता है कि इनका साइज़ बदला जा सकता है या नहीं.
अगर आपका ऐप्लिकेशन इनमें से कोई भी शर्त पूरी करता है, तो उसे फिर से साइज़ में बदलने की सुविधा वाला ऐप्लिकेशन माना जाएगा. साथ ही, उसे साइज़ के हिसाब से काम करने वाले मोड में नहीं रखा जाएगा:
resizeableActivity="true"की मदद से इसका साइज़ बदला जा सकता है- पिक्चर में पिक्चर (पीआईपी) मोड की सुविधा उपलब्ध है
- क्या एम्बेड किया गया है
- क्या डिवाइस बनाने वाली कंपनी ने हर ऐप्लिकेशन के लिए
FORCE_RESIZE_APPओवरराइड लागू किया है (ऐप्लिकेशन की ओर से सेट की गई प्रॉपर्टी को अनदेखा किया जाता है)
अगर आपका ऐप्लिकेशन इनमें से किसी भी शर्त को पूरा नहीं करता है, तो उसे रीसाइज़ नहीं किया जा सकता. साथ ही, उसे साइज़ के हिसाब से काम करने वाले मोड में रखा जा सकता है.
मल्टी-विंडो मोड में, साइज़ न बदलने वाला ऐप्लिकेशन क्रैश हो जाता है.
ऑप्टिमाइज़ेशन
ऐप्लिकेशन, सभी डिसप्ले साइज़ के साथ काम करना चाहिए. ऐप्लिकेशन के मेनिफ़ेस्ट में, <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#setRequestedOrientation() को कॉल करता है.
ऑप्टिमाइज़ेशन
ऐप्लिकेशन को ये काम नहीं करने चाहिए:
- गतिविधि
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 एपीआई शामिल हैं:
प्लेटफ़ॉर्म:
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.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), तो गतिविधि का यूज़र इंटरफ़ेस (यूआई) एक ही आसपेक्ट रेशियो (लंबाई-चौड़ाई का अनुपात) बनाए रखते हुए स्केल होता है.
जिन गतिविधियों का साइज़ नहीं बदला जा सकता उनके यूज़र इंटरफ़ेस (यूआई) को स्केल किया जाता है.
डेस्कटॉप पर विंडो में कैमरे की झलक देखना
डेस्कटॉप विंडोविंग मोड में किसी ऐप्लिकेशन को चलाने पर, डिसप्ले रोटेशन और विंडो ओरिएंटेशन, स्टैंडर्ड फ़ोन पर फ़ुलस्क्रीन मोड में मिलने वाले डिसप्ले रोटेशन और विंडो ओरिएंटेशन से अलग हो सकता है.
समस्या
ऐप्लिकेशन अक्सर यह मान लेते हैं कि डिवाइस और कैमरा सेंसर, पोर्ट्रेट मोड में हैं. इस वजह से, कैमरे की झलक ठीक से नहीं दिखती या उसमें गड़बड़ी होती है.
ऑप्टिमाइज़ेशन
कैमरा ऐप्लिकेशन को डिवाइस और कैमरा सेंसर के ओरिएंटेशन की सही पहचान करनी चाहिए. साथ ही, उन्हें मैनेज करना चाहिए, ताकि कैमरे की झलक को सही तरीके से अलाइन और स्केल किया जा सके. ऐप्लिकेशन को डिवाइस रोटेशन, सेंसर रोटेशन, और विंडो के आसपेक्ट रेशियो का हिसाब लगाना होगा. इसके बाद, नतीजों को कैमरे की झलक पर लागू करना होगा. साथ ही, कैमरे की झलक को विंडो कॉन्फ़िगरेशन में होने वाले बदलावों के हिसाब से भी काम करना होगा. ज़्यादा जानकारी के लिए, कैमरे का प्रीव्यू देखें.
कंपैटबिलिटी से जुड़ी समस्या को हल करने का तरीका
जब डेस्कटॉप विंडो में फ़िक्स्ड ओरिएंटेशन वाले ऐप्लिकेशन, कैमरे की झलक दिखाना शुरू करते हैं, तो सिस्टम, कैमरे के साथ काम करने की सुविधा को ट्रिगर कर सकता है. इससे, झलक को स्ट्रेच होने और साइड में दिखने से रोका जा सकता है.
इलाज, एनवायरमेंट को सैंडबॉक्स करता है, ताकि अनुरोध किए गए ओरिएंटेशन से मेल खा सके. ऐसा इन तरीकों से किया जाता है:
अनुरोध किए गए ओरिएंटेशन के हिसाब से ऐप्लिकेशन की विंडो को लेटरबॉक्स करें: ऐसा इसलिए किया जाता है, ताकि गलत स्केलिंग की वजह से स्ट्रेचिंग की समस्याओं से बचा जा सके.
डिसप्ले रोटेशन को सैंडबॉक्स करना: इस ट्रीटमेंट में, डिवाइस को अनुरोध किए गए ओरिएंटेशन में रखा जाता है. कैमरे की झलक के लिए, आम तौर पर यह गलत अनुमान लगाया जाता है कि ऐप्लिकेशन, पोर्ट्रेट डिवाइस पर चल रहा है. इसलिए, पोर्ट्रेट ओरिएंटेशन का अनुरोध करने वाले ऐप्लिकेशन के लिए, डिसप्ले रोटेशन को 0 डिग्री पर सैंडबॉक्स किया जाता है. वहीं, लैंडस्केप ओरिएंटेशन का अनुरोध करने वाले डिवाइसों के लिए, इसे 90 डिग्री पर सैंडबॉक्स किया जाता है.
कैमरे की इमेज काटना: अगर डिसप्ले रोटेशन बदल गया है, तो यह कैमरे के फ़ीड पर दिखता है: अगर कोई डिवाइस लैंडस्केप ओरिएंटेशन में है और पोर्ट्रेट ओरिएंटेशन का अनुरोध करने वाले ऐप्लिकेशन के लिए, इमेज काटने की सुविधा चालू की जाती है, तो कैमरे के फ़ील्ड ऑफ़ व्यू (कैमरे से दिखने वाला व्यू) को काटकर, पोर्ट्रेट ओरिएंटेशन वाले कैमरे जैसा बना दिया जाता है.
कैमरे के फ़ीड को घुमाएं और काटें: सिस्टम, गतिविधि के तरीकों
onStop()औरonStart()(डिफ़ॉल्ट रूप से) याonPause()औरonResume()(OVERRIDE_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE के ज़रिए हर ऐप्लिकेशन के लिए लागू किया गया ओवरराइड) के बीच साइकल करता है. ऐसा तब होता है, जब कैमरे के फ़ीड को घुमाया और काटा जाता है. इससे यह पक्का किया जाता है कि कैमरे की झलक ठीक से दिखे.
अगर ऐप्लिकेशन, कैमरे की झलक को सही तरीके से मैनेज करते हैं, तो ऐप्लिकेशन डेवलपर इन समाधानों को बदल सकते हैं. हर ऐप्लिकेशन के लिए ओवरराइड देखें.
साइज़ बदला जा रहा है
जब अनुरोध किए गए ओरिएंटेशन का सिम्युलेटेड ट्रीटमेंट चालू होता है, तब विंडो का साइज़ बदलने पर, व्यूफ़ाइंडर यूज़र इंटरफ़ेस (यूआई) का साइज़ भी बदल जाता है. हालांकि, इसका आसपेक्ट रेशियो (लंबाई-चौड़ाई का अनुपात) नहीं बदलता. ऐप्लिकेशन की बाकी विंडो का साइज़ आसानी से बदला जा सकता है.
कैमरा व्यूफ़ाइंडर वाली विंडो का साइज़ बदलना
अपने ऐप्लिकेशन की जांच करके देखें कि वह Android 14 के साथ काम करता है या नहीं
अपने ऐप्लिकेशन को टेस्ट करने और यह समझने के लिए कि यह अलग-अलग डिवाइसों पर कैसे काम करता है, यहां दिए गए संसाधनों का इस्तेमाल करें:
- डिवाइस स्ट्रीमिंग: Google के डेटा सेंटर में होस्ट किए गए प्रोडक्शन डिवाइसों (इसमें रेफ़रंस डिवाइस भी शामिल हैं) पर अपने ऐप्लिकेशन की जांच करने के लिए, Android डिवाइस स्ट्रीमिंग, जो Firebase की मदद से काम करती है लेख पढ़ें
- Android Studio में एम्युलेटर: रेफ़रंस डिवाइसों के लिए एम्युलेटर बनाने के बारे में जानकारी पाने के लिए, वर्चुअल डिवाइस बनाना और मैनेज करना लेख पढ़ें
- Android Studio में साइज़ बदलने वाला एम्युलेटर: वर्चुअल डिवाइसों को ऐक्सेस करने के बारे में जानकारी पाने के लिए, Android Emulator पर ऐप्लिकेशन चलाना लेख पढ़ें
Is letterboxed
पुष्टि करें कि हर गतिविधि, ऐप्लिकेशन के लिए उपलब्ध पूरे डिसप्ले स्पेस का इस्तेमाल कर सकती है. सबसे पहले, अपने टेस्ट फ़ोल्डर में यह कोड डालें:
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 | ब्यौरा |
| Input Compat | OVERRIDE_MOUSE_TO_TOUCH | 413207127 | यह कुकी, माउस डिवाइस से मिले MotionEvent इंस्टेंस को टच इवेंट में बदलती है. इसके लिए, ऐप्लिकेशन को डिलीवर किए जाने पर, MotionEvent सोर्स और टूल टाइप को फिर से लिखा जाता है. |
| साइज़ बदलने की सुविधा | 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_SIMULATE_REQUESTED_ORIENTATION | 398195815 | इससे, कैमरे के साथ काम करने की सुविधा के लिए, अनुरोध किए गए ओरिएंटेशन ट्रीटमेंट को सिम्युलेट करने की सुविधा बंद हो जाती है. डिफ़ॉल्ट रूप से, फ़िक्स्ड ओरिएंटेशन वाले कैमरा ऐप्लिकेशन, कैमरा प्रीव्यू के खुले होने पर, अनुरोध किए गए ओरिएंटेशन के हिसाब से अडजस्ट हो जाते हैं. | |
| 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, ऐप्लिकेशन को फ़ोकस इवेंट भेजता है. इससे ऐप्लिकेशन को कॉन्टेंट फिर से दिखाना शुरू करने का सिग्नल मिलता है. |
OVERRIDE_MOUSE_TO_TOUCH
यह कुकी, कंपैटबिलिटी मोड को चालू करती है. इससे माउस या टचपैड से मिले MotionEvent इंस्टेंस को टच इवेंट में बदल दिया जाता है. इसके लिए, MotionEvent source को SOURCE_TOUCHSCREEN और MotionEvent tool type को TOOL_TYPE_FINGER में बदल दिया जाता है. ऐसा तब होता है, जब मोशन इवेंट ऐप्लिकेशन को डिलीवर किए जाते हैं.
ऐप्लिकेशन, ओवरराइड करने जैसा नतीजा कैसे पा सकते हैं
लागू नहीं. समस्या को ऐप्लिकेशन लॉजिक में हल किया जाना चाहिए.
ऐप्लिकेशन को ऑप्टिमाइज़ करने का तरीका
आपका ऐप्लिकेशन, माउस और टचपैड से मिलने वाले इनपुट इवेंट को हैंडल कर सके. इनमें टचपैड के जेस्चर और माउस व्हील को स्क्रोल करना शामिल है. कीबोर्ड, माउस, और ट्रैकपैड देखें.
बदलाव करने की सुविधा को बंद करने या इससे ऑप्ट आउट करने का तरीका
ऐप्लिकेशन के मेनिफ़ेस्ट में मौजूद <uses-feature> एलिमेंट में FEATURE_PC का एलान करें.
<uses-feature android:name="android.hardware.type.pc"
android:required="false" />
ध्यान दें: android:required="false" को इस तरह सेट करें कि पीसी पर ऐप्लिकेशन इस्तेमाल करने की सुविधा वैकल्पिक हो. साथ ही, Google Play, पीसी के अलावा अन्य डिवाइसों पर ऐप्लिकेशन को शामिल करे.
बदलाव को खारिज करने के लिए प्रॉपर्टी फ़्लैग
कोई नहीं.
adb कमांड का इस्तेमाल करके, ओवरराइड की सुविधा की जांच करना
ओवरराइड लागू करने के लिए:
adb shell am compat enable OVERRIDE_MOUSE_TO_TOUCH <package>
ओवरराइड हटाने के लिए:
adb shell am compat disable OVERRIDE_MOUSE_TO_TOUCH <package>
ध्यान दें: इन कमांड से, सिर्फ़ कुछ समय के लिए ओवरराइड लागू या हटाया जाता है.
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
इससे किसी भी ओरिएंटेशन को बदलने के लिए, यहां दी गई सेटिंग को बदलने की अनुमति मिलती है:
- OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT
- OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR
- OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE
ऐप्लिकेशन, ओवरराइड करने जैसा नतीजा कैसे पा सकते हैं
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_SIMULATE_REQUESTED_ORIENTATION
यह कुकी, कैमरे के लिए अनुरोध किए गए ओरिएंटेशन ट्रीटमेंट को सिम्युलेट करने की सुविधा बंद करती है. इससे कुछ ऐप्लिकेशन पर उपयोगकर्ता अनुभव बेहतर होता है.
ऐप्लिकेशन, ओवरराइड करने जैसा नतीजा कैसे पा सकते हैं
प्रॉपर्टी फ़्लैग PROPERTY_CAMERA_COMPAT_ALLOW_SIMULATE_REQUESTED_ORIENTATION को false पर सेट करें.
ऐप्लिकेशन को ऑप्टिमाइज़ करने का तरीका
कैमरा सेंसर के ओरिएंटेशन या डिवाइस की कैश मेमोरी में सेव की गई जानकारी पर भरोसा न करें. कैमरे के साथ काम करने से जुड़े दिशा-निर्देशों के लिए, कैमरा व्यूफ़ाइंडर की सुविधा के बारे में जानकारी और कैमरा ऐप्लिकेशन में, साइज़ बदलने वाली सतहों के लिए सहायता लेख पढ़ें.
बदलाव करने की सुविधा को बंद करने या इससे ऑप्ट आउट करने का तरीका
इस प्रॉपर्टी में, कंपैटिबिलिटी ट्रीटमेंट की सुविधा बंद होती है. इसलिए, डाइनैमिक डिसप्ले रोटेशन में होने वाले बदलावों, डिवाइस के सेंसर ओरिएंटेशन, और विंडो और प्रीव्यू के साइज़ को ध्यान में रखकर, उपयोगकर्ता अनुभव को बेहतर बनाया जा सकता है.
बदलाव को खारिज करने के लिए प्रॉपर्टी फ़्लैग
<property android:name="android.window.PROPERTY_CAMERA_COMPAT_ALLOW_SIMULATE_REQUESTED_ORIENTATION"
android:value="true|false"/>
adb कमांड का इस्तेमाल करके, ओवरराइड की सुविधा की जांच करना
बदलाव लागू करने के लिए, अनुरोध की गई ओरिएंटेशन को सिम्युलेट करने की सुविधा हटाएं:
adb shell am compat enable OVERRIDE_CAMERA_COMPAT_DISABLE_SIMULATE_REQUESTED_ORIENTATION <package>
बदले गए ओरिएंटेशन को हटाने के लिए, ताकि अनुरोध किए गए ओरिएंटेशन को सिम्युलेट किया जा सके:
adb shell am compat disable OVERRIDE_CAMERA_COMPAT_DISABLE_SIMULATE_REQUESTED_ORIENTATION <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() → onStop() → onResume() साइकल के बजाय onResume()
→ onPause() → 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 या उसके बाद के लेवल पर अपडेट करें. यहां दिया गया उदाहरण देखें:
- लिखें: विंडो इंसर्ट के बारे में जानकारी
- व्यू: व्यू में कॉन्टेंट को एज-टू-एज डिसप्ले करें
- कॉन्फ़िगरेशन: Android 15 या इसके बाद के वर्शन को टारगेट करने वाले ऐप्लिकेशन: काम करने के तरीके में बदलाव
ऐप्लिकेशन को ऑप्टिमाइज़ करने का तरीका
अगर आपका ऐप्लिकेशन, एज-टू-एज डिसप्ले की सुविधा चालू करता है या एपीआई लेवल 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>
ध्यान दें: इन कमांड से, सिर्फ़ कुछ समय के लिए ओवरराइड लागू या हटाया जाता है.
अन्य संसाधन
- बड़ी स्क्रीन वाले ऐप्लिकेशन की क्वालिटी के लिए दिशा-निर्देश
- ऐप्लिकेशन की मुख्य क्वालिटी के लिए दिशा-निर्देश
-
वर्चुअल डिवाइस का मालिक, एक भरोसेमंद या खास अधिकारों वाला ऐप्लिकेशन होता है. यह वर्चुअल डिवाइस को मैनेज करता है. वर्चुअल डिवाइस के मालिक, ऐप्लिकेशन रेंडर करने के लिए वर्चुअल डिवाइस बनाते हैं. इसके बाद, वे ऐप्लिकेशन को रिमोट डिवाइसों पर प्रोजेक्ट करते हैं. जैसे, निजी कंप्यूटर, वर्चुअल रिएलिटी वाले डिवाइस या कार के इन्फ़ोटेनमेंट सिस्टम. वर्चुअल डिवाइस का मालिक, फ़ोन जैसे किसी लोकल डिवाइस पर है. ↩