गतिविधि लॉन्च करने से जुड़ी नीति

ऐक्टिविटी लॉन्च करने के तरीके को ऐप्लिकेशन की AndroidManifest.xml फ़ाइलों में मौजूद लॉन्च मोड, इंटेंट फ़्लैग, और कॉलर की ओर से दिए गए ActivityOptions से तय किया जाता है. गतिविधि लॉन्च करने के लिए, किसी डिसप्ले को टारगेट करने के लिए ActivityOption#setLaunchDisplayId(int) का इस्तेमाल करें.

  • डिफ़ॉल्ट रूप से, गतिविधि उसी डिसप्ले पर लॉन्च होती है जिस पर कॉल करने वाले व्यक्ति का कॉल आ रहा है. उदाहरण के लिए, लॉन्चर से शुरू की गई किसी गतिविधि का नया इंस्टेंस, उसी डिसप्ले पर रखा जाना चाहिए. इसमें कोई अतिरिक्त फ़्लैग या विकल्प नहीं होने चाहिए. लॉन्च करने के लिए, सही कॉन्टेक्स्ट (गतिविधि बनाम ऐप्लिकेशन) का इस्तेमाल करना न भूलें.
  • अगर लॉन्च किसी ऐसे सोर्स से किया जाता है जो किसी खास डिसप्ले से जुड़ा नहीं है (जैसे कि शेल या ऐप्लिकेशन कॉन्टेक्स्ट से), तो गतिविधि को उस टॉप डिसप्ले पर रखा जाता है जिस पर उपयोगकर्ता ने डिवाइस के साथ आखिरी बार इंटरैक्ट किया था या जिससे आखिरी गतिविधि लॉन्च की गई थी.
  • किसी गतिविधि को लॉन्च करने के इंटेंट को, सिस्टम में मौजूद किसी गतिविधि के इंस्टेंस से हल किया जा सकता है. ऐसे मामले में, अगर कोई और फ़्लैग नहीं दिया गया है, तो गतिविधि उसी डिसप्ले पर दिखती है जहां इसका इस्तेमाल आखिरी बार किया गया था. अगर टारगेट डिसप्ले को ActivityOptions#setTargetDisplayId() के साथ तय किया जाता है, तो गतिविधि को उस डिसप्ले पर ले जाया जाता है. हालांकि, ऐसा तब ही किया जाता है, जब सुरक्षा और अन्य पाबंदियों के तहत इसकी अनुमति हो.

सुरक्षा से जुड़ी पाबंदियां

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

  • INTERNAL_SYSTEM_WINDOWअनुमति वाले सिस्टम कॉम्पोनेंट, किसी भी डिसप्ले पर लॉन्च किए जा सकते हैं.
  • ACTIVITY_EMBEDDING अनुमति वाले कॉलर, ActivityInfo.FLAG_ALLOW_EMBEDDED फ़्लैग वाले अन्य ऐप्लिकेशन से गतिविधियां लॉन्च कर सकते हैं.
  • निजी डिसप्ले पर गतिविधि लॉन्च करने की अनुमति सिर्फ़ मालिक या उस डिसप्ले पर मौजूद गतिविधियों को होती है.

डिसप्ले में विंडो जोड़ने पर भी इसी तरह की पाबंदियां लागू होती हैं.

Android 10 में, डिसप्ले पर ऐप्लिकेशन लॉन्च करने से पहले, सुरक्षा से जुड़ी पाबंदियों की जांच करने के लिए ActivityManager#isActivityStartAllowedOnDisplay(Context context, int displayId, Intent intent) तरीका शामिल है. Android 9 और इससे पहले के वर्शन में, ऐप्लिकेशन लॉन्च करने पर पाबंदी होने पर SecurityException दिखता है.

सुरक्षा से जुड़ी ज़्यादातर पाबंदियां, ActivityStackSupervisor#isCallerAllowedToLaunchOnDisplay() तरीके में लागू होती हैं.