अनुशंसित अभ्यास

संग्रह की मदद से व्यवस्थित रहें अपनी प्राथमिकताओं के आधार पर, कॉन्टेंट को सेव करें और कैटगरी में बांटें.

फोल्डेबल और मल्टी-स्क्रीन डिवाइस के लिए ऐप्स

आम तौर पर, ऐप्स को स्थिर पहचानकर्ताओं या तर्क पर भरोसा नहीं करना चाहिए जो कुछ प्रदर्शन आईडी पर निर्भर करता है। ज्यादातर मामलों में, ऐप्स को अलग-अलग डिस्प्ले पर आकार बदलना चाहिए और काम करना चाहिए और सिस्टम को यह नियंत्रित करना चाहिए कि ऐप्स का पता कहाँ लगाया जाए। उदाहरण के लिए, फोल्डेबल डिवाइस के लिए एक नया और अनूठा अनुभव बनाने के लिए और डिवाइस के फोल्ड होने पर बाहरी स्क्रीन पर एक विशेष ऐप लॉन्च करना।

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

प्रदर्शनों तक पहुंच प्रतिबंधित करना

यदि डिवाइस कॉन्फ़िगरेशन के लिए एक या अधिक डिस्प्ले तक पहुंच के प्रतिबंध की आवश्यकता होती है, तो ऐसे डिस्प्ले को निजी के रूप में नामित करने के लिए 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# 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" हो सकता है। एक अन्य विकल्प हार्डवेयर पोर्ट जानकारी का उपयोग करना और DisplayWindowSettings#IDENTIFIER_PORT के अनुरूप identifier="1" सेट करना है और फिर "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>

विवरण के लिए, स्थिर प्रदर्शन पहचानकर्ता देखें।

अधिक जानकारी के लिए देखें: