फ़ोल्ड किए जा सकने वाले और मल्टी-स्क्रीन डिवाइसों के लिए ऐप्लिकेशन
आम तौर पर, ऐप्लिकेशन को स्टैटिक आइडेंटिफ़ायर या ऐसे लॉजिक पर भरोसा नहीं किया जाना चाहिए जो कुछ डिसप्ले आईडी. ज़्यादातर मामलों में, ऐप्लिकेशन का साइज़ बदलना चाहिए और अलग-अलग डिसप्ले पर काम करना चाहिए साथ ही, सिस्टम को यह कंट्रोल करना होगा कि ऐप्लिकेशन कहां मिलेंगे. उदाहरण के लिए, फ़ोल्ड किए जा सकने वाले डिवाइसों को देखने का नया और खास अनुभव पाएं. साथ ही, इस पर एक खास ऐप्लिकेशन लॉन्च करें डिवाइस के फ़ोल्ड होने पर, बाहरी स्क्रीन.
इस मामले में, SystemUI (या किसी दूसरे सिस्टम कॉम्पोनेंट) को उसे फ़ोल्ड करें, फिर यह तय करें कि क्या कोई कार्रवाई करना सही है. इसके बाद, गतिविधि को टारगेट करें और लॉन्च टारगेट के तौर पर कोई बाहरी डिसप्ले आईडी तय करें. ऐप्लिकेशन को इस कार्रवाई का पता नहीं लगाना चाहिए या रिस्पॉन्स के तौर पर कोई कार्रवाई नहीं करनी चाहिए. किसी ख़ास डिसप्ले पर लॉन्च करने के लिए. दूसरे शब्दों में, यह न मानें कि जो एक डिवाइस पर काम करते हैं, वे दूसरे डिवाइस पर भी काम करेंगे. संक्षेप में, डिवाइस के हिसाब से कोड फ़्रैगमेंटेशन को बढ़ाता है.
डिसप्ले का ऐक्सेस प्रतिबंधित करें
अगर डिवाइस कॉन्फ़िगरेशन के लिए एक या उससे ज़्यादा ऐक्सेस पर पाबंदी लगाना ज़रूरी हो
दिखाता है, तो आपको Display#FLAG_PRIVATE
फ़्लैग का इस्तेमाल करने का सुझाव दिया जाता है
का इस्तेमाल करके, ऐसे डिसप्ले को निजी के तौर पर दिखाया जा सकता है. ऐसा करने से
मालिक को डिसप्ले में कॉन्टेंट जोड़ने से रोकना होगा. कोई गतिविधि शुरू करने या
किसी भी व्यक्ति के ज़रिए विंडो जोड़ने की सुविधा मिलती है. हालांकि, मालिक के तौर पर सिर्फ़ SecurityException
दिखता है.
अगर डिसप्ले का मालिकाना हक सिस्टम के पास है, तो सिस्टम विंडो जोड़ सकता है और गतिविधियां लॉन्च कर सकता है.
इसके अलावा, डिसप्ले पर रखी गई इकाइयां कभी भी उस डिसप्ले को ऐक्सेस कर सकती हैं. अगर मालिक ने डिसप्ले पर कोई गतिविधि लॉन्च की है, तो वह गतिविधि अन्य गतिविधियों को ट्रैक किया जा सकता है. इस वजह से, इन पाबंदियों को सिर्फ़ भरोसेमंद ऐप्लिकेशन को ऐक्सेस करने और अनुमति देने के लिए.
इसके अलावा, वर्चुअल डिसप्ले पर ज़्यादा पाबंदियां जोड़ी जाती हैं, क्योंकि कोई भी ऐप्लिकेशन
बनाने के लिए, उसे उपयोगकर्ता को दिखाने की अनुमति नहीं देनी होगी. अगर वर्चुअल डिसप्ले नहीं है
का मालिकाना हक हासिल करने के लिए, सिस्टम के मालिक होते हैं.
allowEmbedded
अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है
की अनुमति है और कॉलर के पास ACTIVITY_EMBEDDING
होना चाहिए
अनुमति.
ज़्यादा जानकारी के लिए, ये देखें:
ActivityStackSupervisor#isCallerAllowedToLaunchOnDisplay()
ActivityDisplay#isUidPresent()
DisplayManagerService#isUidPresentOnDisplay()
लॉन्च की गई गतिविधियों को शर्तों के साथ कंट्रोल करने के लिए, LaunchParamsController
का इस्तेमाल करें,
यह सभी लॉन्च को रोकता है और सिस्टम कॉम्पोनेंट को
लॉन्च के लिए इस्तेमाल किए जाने वाले पैरामीटर. यह system_server
में उपलब्ध है.
डिसप्ले विंडोइंग सेटिंग और सिस्टम की सजावट को कॉन्फ़िगर करें
सिस्टम की सजावट ये काम कर सकती है
DisplayWindowSettings
में हर डिसप्ले के हिसाब से कॉन्फ़िगर की जाएगी. डिवाइस
लागू करने पर,
/data/system/display_settings.xml
.
यह मान तय करता है कि सिस्टम की सजावट (लॉन्चर, वॉलपेपर,
और IME) और डिसप्ले पर दिखेंगे.
ज़्यादा जानकारी के लिए, DisplayWindowSettings#shouldShowSystemDecorsLocked()
देखें
और DisplayWindowSettings#shouldShowImeLocked()
.
डिसप्ले की पहचान करने के लिए, किसी एक यूनीक आईडी का इस्तेमाल करें. यूनीक आईडी की मदद से,
DisplayInfo#uniqueId
) या हार्डवेयर के लिए फ़िज़िकल पोर्ट आईडी
दिखाता है (DisplayInfo#address
देखें).
उदाहरण के लिए, नीचे दिए गए डिसप्ले कॉन्फ़िगरेशन के उदाहरण में, सिस्टम डेकोरेशन और सिम्युलेटेड डिसप्ले पर IME:
<?xml version='1.0' encoding='utf-8' standalone='yes' ?> <display-settings> <config identifier="0" /> <display name="overlay:1" shouldShowSystemDecors="true" shouldShowIme="true" /> </display-settings>
ऊपर दिए गए उदाहरण में, uniqueId
का इस्तेमाल डिसप्ले की पहचान के लिए किया जाता है
नाम एट्रिब्यूट में, जो सिम्युलेटेड डिसप्ले के लिए overlay:1
है.
पहले से मौजूद डिसप्ले के लिए, सैंपल वैल्यू "local:45354385242535243453"
हो सकती है.
हार्डवेयर पोर्ट की जानकारी का इस्तेमाल करना और identifier="1"
सेट करना दूसरा विकल्प है
DisplayWindowSettings#IDENTIFIER_PORT
से मेल खाने के लिए और फिर
"port:<port_id>"
प्रारूप का उपयोग करने के लिए नाम:
<?xmlversion='1.0' encoding='utf-8' standalone='yes' ?> <display-settings> <config identifier="1" /> <display name="port:12345" shouldShowSystemDecors="true" shouldShowIme="true" /> </display-settings>
ज़्यादा जानकारी के लिए, स्टैटिक डिसप्ले आइडेंटिफ़ायर देखें.
ज़्यादा जानकारी के लिए, ये देखें: