बताएं कि पैकेज किसको दिखे

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

अगर आपका ऐप्लिकेशन, Android 11 या इसके बाद के वर्शन को टारगेट करता है और उसे उन ऐप्लिकेशन के अलावा अन्य ऐप्लिकेशन के साथ इंटरैक्ट करना है जो अपने-आप दिखते हैं, तो अपने ऐप्लिकेशन की <queries> एलिमेंट को अपनी ऐप्लिकेशन की मेनिफ़ेस्ट फ़ाइल में जोड़ें. <queries> एलिमेंट में, अन्य ऐप्लिकेशन के बारे में जानकारी दें. इसके लिए, पैकेज का नाम, इंटेंट सिग्नेचर या सेवा देने वाली कंपनी की अथॉरिटी का इस्तेमाल करें. इसके बारे में, यहां दिए गए सेक्शन में बताया गया है.

पैकेज के खास नाम

अगर आपको उन खास ऐप्लिकेशन के बारे में पता है जिनसे आपको क्वेरी करनी है या इंटरैक्ट करना है, तो उनके पैकेज के नाम शामिल करें. जैसे, वे ऐप्लिकेशन जो आपके ऐप्लिकेशन के साथ इंटिग्रेट होते हैं या जिनकी सेवाओं का इस्तेमाल किया जाता है. इसके लिए, उनके पैकेज के नाम <package> एलिमेंट के सेट में <queries> एलिमेंट में शामिल करें:

<manifest package="com.example.game">
    <queries>
        <package android:name="com.example.store" />
        <package android:name="com.example.services" />
    </queries>
    ...
</manifest>

लाइब्रेरी में मौजूद किसी होस्ट ऐप्लिकेशन से कम्यूनिकेट करना

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

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

<!-- Place inside the <queries> element. -->
<package android:name=PACKAGE_NAME />

इस एलान को शामिल करके, यह देखा जा सकता है कि होस्ट ऐप्लिकेशन इंस्टॉल है या नहीं. साथ ही, इसके साथ इंटरैक्ट किया जा सकता है. जैसे, bindService() को कॉल करके. आपकी लाइब्रेरी का इस्तेमाल करने वाला कॉलिंग ऐप्लिकेशन, इस इंटरैक्शन की वजह से अपने-आप होस्ट ऐप्लिकेशन के लिए दिखने लगता है.

ऐसे पैकेज जो इंटेंट फ़िल्टर सिग्नेचर से मेल खाते हैं

हो सकता है कि आपके ऐप्लिकेशन को किसी खास मकसद के लिए काम करने वाले ऐप्लिकेशन के सेट से क्वेरी करनी हो या इंटरैक्ट करना हो. हालांकि, आपको शामिल करने के लिए पैकेज के खास नाम न पता हों. ऐसे में, अपने <queries> एलिमेंट में इंटेंट फ़िल्टर सिग्नेचर की सूची शामिल की जा सकती है. इसके बाद, आपका ऐप्लिकेशन उन ऐप्लिकेशन को खोज सकता है जिनमें मेल खाते <intent-filter> एलिमेंट हैं.

यहां दिए गए कोड के उदाहरण में, <intent> एलिमेंट दिखाया गया है. इसकी मदद से, ऐप्लिकेशन इंस्टॉल किए गए अन्य ऐप्लिकेशन को देख सकता है. ये ऐप्लिकेशन, JPEG फ़ॉर्मैट में इमेज शेयर करने की सुविधा देते हैं:

<manifest package="com.example.game">
    <queries>
        <intent>
            <action android:name="android.intent.action.SEND" />
            <data android:mimeType="image/jpeg" />
        </intent>
    </queries>
    ...
</manifest>

<intent> एलिमेंट पर कुछ पाबंदियां लागू होती हैं:

  • इसमें सिर्फ़ एक <action> एलिमेंट शामिल किया जा सकता है.
  • <data> एलिमेंट में, path, pathPrefix, pathPattern, या port एट्रिब्यूट का इस्तेमाल नहीं किया जा सकता. सिस्टम इस तरह काम करता है जैसे कि आपने हर एट्रिब्यूट की वैल्यू को सामान्य वाइल्डकार्ड वर्ण (*) पर सेट किया हो.
  • mimeGroup एट्रिब्यूट का इस्तेमाल <data> एलिमेंट में नहीं किया जा सकता.
  • किसी एक <intent> एलिमेंट के <data> एलिमेंट में, इनमें से हर एट्रिब्यूट का इस्तेमाल ज़्यादा से ज़्यादा एक बार किया जा सकता है:

    • mimeType
    • scheme
    • host

    इन एट्रिब्यूट को कई <data> एलिमेंट में बांटा जा सकता है या इनका इस्तेमाल किसी एक <data> एलिमेंट में किया जा सकता है.

<intent> एलिमेंट, कुछ एट्रिब्यूट की वैल्यू के तौर पर सामान्य वाइल्डकार्ड वर्ण (*) के साथ काम करता है:

  • name एट्रिब्यूट का <action> एलिमेंट.
  • <data> एलिमेंट के mimeType एट्रिब्यूट का सबटाइप (image/*).
  • <data> एलिमेंट के mimeType एट्रिब्यूट का टाइप और सबटाइप (*/*).
  • scheme एट्रिब्यूट का <data> एलिमेंट.
  • host एट्रिब्यूट का <data> एलिमेंट.

जब तक पिछली सूची में कोई अन्य जानकारी न दी गई हो, तब तक सिस्टम, टेक्स्ट और वाइल्डकार्ड वर्णों के मिक्स के साथ काम नहीं करता. जैसे, prefix*.

ऐसे पैकेज जो किसी खास अथॉरिटी का इस्तेमाल करते हैं

अगर आपको किसी कॉन्टेंट प्रोवाइडर से क्वेरी करनी है, लेकिन आपको पैकेज के खास नाम नहीं पता हैं, तो प्रोवाइडर अथॉरिटी का एलान <provider> एलिमेंट में किया जा सकता है. जैसा कि यहां दिए गए स्निपेट में दिखाया गया है:

<manifest package="com.example.suite.enterprise">
    <queries>
        <provider android:authorities="com.example.settings.files" />
    </queries>
    ...
</manifest>

प्रोवाइडर अथॉरिटी का एलान, किसी एक <queries> एलिमेंट में किया जा सकता है. <queries> एलिमेंट में, एक या उससे ज़्यादा <provider> एलिमेंट का एलान किया जा सकता है. A <provider> एलिमेंट में, एक प्रोवाइडर अथॉरिटी या a सेमीकोलन से अलग की गई प्रोवाइडर अथॉरिटी की सूची शामिल की जा सकती है.

सभी ऐप्लिकेशन (यह तरीका इस्तेमाल करने का सुझाव नहीं दिया जाता)

कुछ मामलों में, आपके ऐप्लिकेशन को डिवाइस पर इंस्टॉल किए गए सभी ऐप्लिकेशन से क्वेरी करनी पड़ सकती है या इंटरैक्ट करना पड़ सकता है. भले ही, उनमें कौनसे कॉम्पोनेंट शामिल हों. आपके ऐप्लिकेशन को इंस्टॉल किए गए अन्य सभी ऐप्लिकेशन दिखाने की अनुमति देने के लिए, सिस्टम QUERY_ALL_PACKAGES अनुमति देता है.

यहां इस्तेमाल के कुछ ऐसे उदाहरण दिए गए हैं जिनमें QUERY_ALL_PACKAGES अनुमति शामिल करना सही है:

  • सुलभता ऐप्लिकेशन
  • ब्राउज़र
  • डिवाइस मैनेजमेंट ऐप्लिकेशन
  • सुरक्षा से जुड़े ऐप्लिकेशन
  • एंटीवायरस की सुविधा देने वाले ऐप्लिकेशन

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

Google Play की इस नीति के अपडेट में, उन ऐप्लिकेशन के लिए दिशा-निर्देश दिए गए हैं जिन्हें QUERY_ALL_PACKAGES अनुमति की ज़रूरत होती है.