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

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

    • mimeType
    • scheme
    • host

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

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

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

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

किसी खास संस्था या निकाय का इस्तेमाल करने वाले पैकेज

अगर आपको किसी कॉन्टेंट से जुड़ी क्वेरी करनी है, तो provider, लेकिन आपको पैकेज के खास नाम नहीं पता हैं, तो सेवा देने वाली कंपनी का एलान किया जा सकता है <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 की नीति के बारे में यह अपडेट खेलें उन ऐप्लिकेशन के लिए दिशा-निर्देश देती है जिन्हें QUERY_ALL_PACKAGES अनुमति की ज़रूरत होती है.