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

ऐप्लिकेशन बनाते समय, डिवाइस पर मौजूद अन्य ऐप्लिकेशन को भी ध्यान में रखना ज़रूरी है जिसके साथ आपके ऐप्लिकेशन को इंटरैक्ट करना ज़रूरी हो. अगर आपका ऐप्लिकेशन, 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 लाइब्रेरी बनाई है, तो एएआर मेनिफ़ेस्ट फ़ाइल में <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 एट्रिब्यूट का इस्तेमाल नहीं किया जा सकता. सिस्टम इस तरह काम करता है जैसे कि हर एट्रिब्यूट की वैल्यू सेट की जाती है को सामान्य वाइल्डकार्ड वर्ण (*) में जोड़ा जा सकता है.
  • <data> एलिमेंट के mimeGroup एट्रिब्यूट का इस्तेमाल नहीं किया जा सकता.
  • किसी एक <intent> एलिमेंट के <data> एलिमेंट में, इनमें से हर एट्रिब्यूट का इस्तेमाल ज़्यादा से ज़्यादा एक बार किया जा सकता है:

    • mimeType
    • scheme
    • host

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

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

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

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

ऐसे पैकेज जो किसी खास प्राधिकरण का इस्तेमाल करते हैं

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

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

एक <queries> एलिमेंट में, सेवा देने वाली कंपनियों के बारे में जानकारी दी जा सकती है. इस <queries> एलिमेंट के साथ, आपके पास एक या ज़्यादा <provider> एलिमेंट का एलान करने की सुविधा है. ऐप्लिकेशन <provider> एलिमेंट में, सेवा देने वाली एक संस्था या सेवा देने वाली इकाइयों की सेमीकोलन-डीलिमिटेड सूची.

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

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

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

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

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

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