<provider>

सिंटैक्स:
<provider android:authorities="list"
          android:directBootAware=["true" | "false"]
          android:enabled=["true" | "false"]
          android:exported=["true" | "false"]
          android:grantUriPermissions=["true" | "false"]
          android:icon="drawable resource"
          android:initOrder="integer"
          android:intentMatchingFlags=["none" | "enforceIntentFilter" | "allowNullAction"]
          android:label="string resource"
          android:multiprocess=["true" | "false"]
          android:name="string"
          android:permission="string"
          android:process="string"
          android:readPermission="string"
          android:syncable=["true" | "false"]
          android:writePermission="string" >
    ...
</provider>
इसमें शामिल:
<application>
इसमें ये एलिमेंट शामिल हो सकते हैं:
<meta-data>
<grant-uri-permission>
<intent-filter>
<path-permission>
<property>
विवरण:
यह कॉन्टेंट देने वाले कॉम्पोनेंट का एलान करता है. कॉन्टेंट देने वाला कॉम्पोनेंट, ContentProvider की सबक्लास होती है. यह ऐप्लिकेशन से मैनेज किए गए डेटा को स्ट्रक्चर्ड तरीके से ऐक्सेस करने की सुविधा देती है. आपके ऐप्लिकेशन में मौजूद सभी कॉन्टेंट देने वाले कॉम्पोनेंट को, मेनिफ़ेस्ट फ़ाइल में <provider> एलिमेंट में तय किया जाना चाहिए. ऐसा न करने पर, सिस्टम को उनके बारे में पता नहीं चलता और वह उन्हें नहीं चलाता.

सिर्फ़ उन कॉन्टेंट देने वाले कॉम्पोनेंट का एलान करें जो आपके ऐप्लिकेशन का हिस्सा हैं. अपने ऐप्लिकेशन में इस्तेमाल किए जाने वाले अन्य ऐप्लिकेशन में मौजूद कॉन्टेंट देने वाले कॉम्पोनेंट का एलान न करें.

Android सिस्टम, कॉन्टेंट देने वाले कॉम्पोनेंट के रेफ़रंस को अथॉरिटी स्ट्रिंग के हिसाब से सेव करता है. यह स्ट्रिंग, कॉम्पोनेंट के कॉन्टेंट यूआरआई का हिस्सा होती है. उदाहरण के लिए, मान लें कि आपको कॉन्टेंट देने वाले किसी ऐसे कॉम्पोनेंट को ऐक्सेस करना है जिसमें स्वास्थ्य सेवा से जुड़े पेशेवरों के बारे में जानकारी सेव है. इसके लिए, `ContentResolver.query()` तरीके को कॉल करें. यह तरीका, अन्य आर्ग्युमेंट के अलावा, एक यूआरआई लेता है जो कॉम्पोनेंट की पहचान करता है:ContentResolver.query()

content://com.example.project.healthcareprovider/nurses/rn

content: स्कीम , यूआरआई की पहचान कॉन्टेंट यूआरआई के तौर पर करती है. यह यूआरआई, Android के कॉन्टेंट देने वाले कॉम्पोनेंट की ओर इशारा करता है. अथॉरिटी com.example.project.healthcareprovider कॉम्पोनेंट की पहचान करती है. Android सिस्टम, जानी-मानी कंपनियों और उनकी अथॉरिटी की सूची में अथॉरिटी को ढूंढता है. सबस्ट्रिंग nurses/rn एक पाथ है. इसका इस्तेमाल, कॉन्टेंट देने वाला कॉम्पोनेंट, कॉम्पोनेंट के डेटा के सबसेट की पहचान करने के लिए करता है.

<provider> एलिमेंट में कॉम्पोनेंट तय करते समय, android:name आर्ग्युमेंट में स्कीम या पाथ शामिल न करें. इसमें सिर्फ़ अथॉरिटी शामिल करें.

कॉन्टेंट देने वाले कॉम्पोनेंट के इस्तेमाल और उन्हें डेवलप करने के बारे में जानकारी के लिए, कॉन्टेंट देने वाले कॉम्पोनेंट देखें.

एट्रिब्यूट:
android:authorities
एक या उससे ज़्यादा यूआरआई अथॉरिटी की सूची. यह सूची, कॉन्टेंट देने वाले कॉम्पोनेंट से ऑफ़र किए गए डेटा की पहचान करती है. एक से ज़्यादा अथॉरिटी की सूची बनाने के लिए, उनके नामों को सेमीकोलन से अलग करें. टकराव से बचने के लिए, अथॉरिटी के नामों के लिए Java-स्टाइल नेमिंग कन्वेंशन का इस्तेमाल करें, जैसे com.example.provider.cartoonprovider. आम तौर पर, यह ContentProvider की उस सबक्लास का नाम होता है जो कॉम्पोनेंट को लागू करती है

कोई डिफ़ॉल्ट वैल्यू नहीं है. कम से कम एक अथॉरिटी तय की जानी चाहिए.

android:enabled
इससे यह तय होता है कि सिस्टम, कॉन्टेंट देने वाले कॉम्पोनेंट को इंस्टैंशिएट कर सकता है या नहीं. अगर इंस्टैंशिएट किया जा सकता है, तो इसकी वैल्यू "true" होती है. अगर नहीं किया जा सकता, तो इसकी वैल्यू "false" होती है. डिफ़ॉल्ट वैल्यू होती है "true".

The <application> एलिमेंट में अपना enabled एट्रिब्यूट होता है. यह एट्रिब्यूट, कॉन्टेंट देने वाले कॉम्पोनेंट के साथ-साथ ऐप्लिकेशन के सभी कॉम्पोनेंट पर लागू होता है. कॉन्टेंट देने वाले कॉम्पोनेंट को चालू करने के लिए, <application> और <provider> दोनों एट्रिब्यूट की वैल्यू "true"होनी चाहिए. डिफ़ॉल्ट रूप से, दोनों की वैल्यू होती है. अगर इनमें से किसी की भी वैल्यू "false" है, तो कॉम्पोनेंट बंद हो जाता है. इसे इंस्टैंशिएट नहीं किया जा सकता.

android:directBootAware

इससे यह तय होता है कि कॉन्टेंट देने वाला कॉम्पोनेंट, डायरेक्ट-बूट अवेयर है या नहीं. इसका मतलब है कि यह उपयोगकर्ता के डिवाइस अनलॉक करने से पहले चल सकता है या नहीं.

ध्यान दें: डायरेक्ट बूटके दौरान, आपके ऐप्लिकेशन में मौजूद कॉन्टेंट देने वाला कॉम्पोनेंट, सिर्फ़ डिवाइस से सुरक्षित स्टोरेज में सेव किए गए डेटा को ऐक्सेस कर सकता है.

डिफ़ॉल्ट वैल्यू "false" होती है.

android:exported
इससे यह तय होता है कि कॉन्टेंट देने वाला कॉम्पोनेंट, अन्य ऐप्लिकेशन के लिए उपलब्ध है या नहीं.
  • "true": कॉम्पोनेंट, अन्य ऐप्लिकेशन के लिए उपलब्ध है. कोई भी ऐप्लिकेशन, कॉम्पोनेंट के कॉन्टेंट यूआरआई का इस्तेमाल करके इसे ऐक्सेस कर सकता है. हालांकि, इसके लिए कॉम्पोनेंट के लिए तय की गई अनुमतियां ज़रूरी हैं.
  • "false": कॉम्पोनेंट, अन्य ऐप्लिकेशन के लिए उपलब्ध नहीं है. अपने ऐप्लिकेशन के लिए, कॉम्पोनेंट का ऐक्सेस सीमित करने के लिए, android:exported="false" सेट करें. सिर्फ़ उन ऐप्लिकेशन के पास इसका ऐक्सेस होता है जिनका यूज़र आईडी (यूआईडी), कॉम्पोनेंट के यूआईडी के बराबर होता है. इसके अलावा, उन ऐप्लिकेशन के पास भी इसका ऐक्सेस होता है जिन्हें android:grantUriPermissions एलिमेंट के ज़रिए, कॉम्पोनेंट को अस्थायी तौर पर ऐक्सेस करने की अनुमति दी गई है.

यह एट्रिब्यूट, एपीआई लेवल 17 में जोड़ा गया था. इसलिए, एपीआई लेवल 16 और उससे पहले के वर्शन वाले सभी डिवाइस, इस तरह काम करते हैं जैसे कि इस एट्रिब्यूट की वैल्यू "true" सेट की गई हो. अगर android:targetSdkVersion को 17 या उससे ज़्यादा पर सेट किया जाता है, तो एपीआई लेवल 17 और उससे ज़्यादा के वर्शन वाले डिवाइसों के लिए, डिफ़ॉल्ट वैल्यू "false" होती है.

android:exported="false" सेट करने के बाद भी, एट्रिब्यूट की मदद से अनुमतियां सेट करके, अपने कॉम्पोनेंट का ऐक्सेस सीमित किया जा सकता है.permission

android:grantUriPermissions

इससे यह तय होता है कि जिन लोगों के पास आम तौर पर, कॉन्टेंट देने वाले कॉम्पोनेंट के डेटा को ऐक्सेस करने की अनुमति नहीं है उन्हें यह अनुमति दी जा सकती है या नहीं. ऐसा करने पर, readPermission, writePermission, permission, और exported एट्रिब्यूट से लगाई गई पाबंदी अस्थायी तौर पर हट जाती है.

अगर अनुमति दी जा सकती है, तो इसकी वैल्यू "true" होती है. अगर नहीं दी जा सकती, तो इसकी वैल्यू "false" होती है. अगर वैल्यू "true" है, तो कॉन्टेंट देने वाले कॉम्पोनेंट के किसी भी डेटा को ऐक्सेस करने की अनुमति दी जा सकती है. अगर वैल्यू "false" है, तो अनुमति सिर्फ़ उन डेटा सबसेट को दी जा सकती है जो <grant-uri-permission> सबएलिमेंट में शामिल हैं. अगर कोई सबएलिमेंट शामिल नहीं है, तो किसी को भी अनुमति नहीं दी जा सकती. डिफ़ॉल्ट वैल्यू "false" होती है.

अनुमति देने का मतलब है कि किसी ऐप्लिकेशन कॉम्पोनेंट को, अनुमति से सुरक्षित किए गए डेटा को एक बार ऐक्सेस करने की अनुमति देना. उदाहरण के लिए, जब किसी ईमेल मैसेज में कोई अटैचमेंट होता है, तो मेल ऐप्लिकेशन, उसे खोलने के लिए सही व्यूअर को कॉल कर सकता है. भले ही, व्यूअर के पास कॉन्टेंट देने वाले कॉम्पोनेंट के सभी डेटा को देखने की सामान्य अनुमति न हो.

ऐसे मामलों में, अनुमति Intent ऑब्जेक्ट में मौजूद FLAG_GRANT_READ_URI_PERMISSION और FLAG_GRANT_WRITE_URI_PERMISSION फ़्लैग से दी जाती है. यह ऑब्जेक्ट, कॉम्पोनेंट को चालू करता है. उदाहरण के लिए, मेल ऐप्लिकेशन, Context.startActivity() को पास किए गए Intent में FLAG_GRANT_READ_URI_PERMISSION डाल सकता है. अनुमति, Intent में मौजूद यूआरआई के लिए खास होती है.

अगर आपने इस सुविधा को चालू किया है, तो इस एट्रिब्यूट को "true" पर सेट करके या <grant-uri-permission> सबएलिमेंट तय करके, कॉम्पोनेंट से कवर किया गया कोई यूआरआई मिटाने पर, Context.revokeUriPermission() को कॉल करें.

<grant-uri-permission> एलिमेंट भी देखें.

android:icon
कॉन्टेंट देने वाले कॉम्पोनेंट को दिखाने वाला आइकॉन. इस एट्रिब्यूट को, ड्रॉएबल रिसॉर्स के रेफ़रंस के तौर पर सेट किया जाता है. इसमें इमेज की डेफ़िनिशन शामिल होती है. अगर इसे सेट नहीं किया जाता है, तो इसके बजाय, पूरे ऐप्लिकेशन के लिए तय किया गया आइकॉन इस्तेमाल किया जाता है. ज़्यादा जानकारी के लिए, <application> एलिमेंट का icon एट्रिब्यूट देखें.
android:initOrder
कॉन्टेंट देने वाले कॉम्पोनेंट को इंस्टैंशिएट करने का क्रम. यह क्रम, उसी प्रोसेस में होस्ट किए गए अन्य कॉन्टेंट देने वाले कॉम्पोनेंट के मुकाबले तय किया जाता है. जब कॉन्टेंट देने वाले कॉम्पोनेंट के बीच डिपेंडेंसी होती है, तो हर कॉम्पोनेंट के लिए इस एट्रिब्यूट को सेट करने से यह पक्का होता है कि उन्हें उन डिपेंडेंसी के हिसाब से तय क्रम में बनाया गया है. इसकी वैल्यू एक पूर्णांक होती है. इसमें बड़ी संख्याओं को पहले शुरू किया जाता है.
android:intentMatchingFlags

इस एट्रिब्यूट का इस्तेमाल करके, यह तय किया जा सकता है कि सिस्टम, आने वाले इंटेंट को ऐप्लिकेशन के कॉम्पोनेंट से कैसे मैच करता है. डिफ़ॉल्ट रूप से, मैचिंग के लिए कोई खास नियम लागू नहीं किए जाते.

<provider> टैग पर सेट की गई वैल्यू, <application> टैग पर सेट की गई वैल्यू को बदल देती है.

इसकी वैल्यू, इनमें से एक या उससे ज़्यादा फ़्लैग होनी चाहिए. इन्हें '|' से अलग किया जाता है:

फ़्लैग ब्यौरा
none आने वाले इंटेंट के लिए, मैचिंग के सभी खास नियमों को बंद कर देता है. एक से ज़्यादा फ़्लैग तय करते समय, टकराव वाली वैल्यू को none फ़्लैग को प्राथमिकता देकर हल किया जाता है.
enforceIntentFilter

आने वाले इंटेंट के लिए, मैचिंग के सख्त नियम लागू करता है:

  • एक्सप्लिसिट इंटेंट, टारगेट कॉम्पोनेंट के इंटेंट फ़िल्टर से मैच होने चाहिए.
  • कार्रवाई के बिना इंटेंट, किसी भी इंटेंट फ़िल्टर से मैच नहीं होते.
allowNullAction

मैचिंग के नियमों में ढील देता है, ताकि कार्रवाई के बिना इंटेंट मैच हो सकें. इस फ़्लैग का इस्तेमाल, enforceIntentFilter के साथ मिलकर किया जाता है, ताकि यह व्यवहार हासिल किया जा सके:

  • एक्सप्लिसिट इंटेंट, टारगेट कॉम्पोनेंट के इंटेंट फ़िल्टर से मैच होने चाहिए.
  • कार्रवाई के बिना इंटेंट, किसी भी इंटेंट फ़िल्टर से मैच हो सकते हैं.

ज़्यादा जानकारी के लिए, Android 16 (एपीआई लेवल 36) के व्यवहार में हुए बदलावों में, सुरक्षित इंटेंट सेक्शन देखें.

android:label
कॉन्टेंट के लिए, उपयोगकर्ता के लिए पढ़ने लायक लेबल. अगर इस एट्रिब्यूट को सेट नहीं किया जाता है, तो इसके बजाय, पूरे ऐप्लिकेशन के लिए सेट किया गया लेबल इस्तेमाल किया जाता है. ज़्यादा जानकारी के लिए, <application> एलिमेंट का label एट्रिब्यूट देखें.

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

android:multiprocess
अगर ऐप्लिकेशन एक से ज़्यादा प्रोसेस में चलता है, तो यह एट्रिब्यूट तय करता है कि कॉन्टेंट देने वाले कॉम्पोनेंट के एक से ज़्यादा इंस्टेंस बनाए जाएंगे या नहीं. अगर वैल्यू "true" है, तो ऐप्लिकेशन की हर प्रोसेस का अपना कॉन्टेंट देने वाला कॉम्पोनेंट ऑब्जेक्ट होता है. अगर वैल्यू "false" है, तो ऐप्लिकेशन की प्रोसेस सिर्फ़ एक कॉन्टेंट देने वाले कॉम्पोनेंट ऑब्जेक्ट को शेयर करती हैं. डिफ़ॉल्ट वैल्यू "false" होती है.

इस फ़्लैग को "true" पर सेट करने से, इंटरप्रोसेस कम्यूनिकेशन का ओवरहेड कम करके परफ़ॉर्मेंस को बेहतर बनाया जा सकता है. हालांकि, इससे हर प्रोसेस का मेमोरी फ़ुटप्रिंट भी बढ़ जाता है.

android:name
कॉन्टेंट देने वाले कॉम्पोनेंट को लागू करने वाली क्लास का नाम. यह क्लास, ContentProvider की सबक्लास होती है. आम तौर पर, यह पूरी तरह क्वालिफ़ाइड क्लास का नाम होता है. जैसे, "com.example.project.TransportationProvider". हालांकि, शॉर्टहैंड के तौर पर, अगर नाम का पहला वर्ण पीरियड है, तो इसे पैकेज के नाम में जोड़ा जाता है, जिसे <manifest> एलिमेंट में तय किया गया है.

कोई डिफ़ॉल्ट वैल्यू नहीं है. नाम तय किया जाना चाहिए.

android:permission

किसी ऐसी अनुमति का नाम जो क्लाइंट के पास, कॉन्टेंट देने वाले कॉम्पोनेंट का डेटा पढ़ने या लिखने के लिए होनी चाहिए. यह एट्रिब्यूट, पढ़ने और लिखने, दोनों के लिए एक ही अनुमति सेट करने का आसान तरीका है. हालांकि, readPermission, writePermission, और grantUriPermissions एट्रिब्यूट को इस एट्रिब्यूट से ज़्यादा प्राथमिकता मिलती है.

अगर readPermission एट्रिब्यूट भी सेट किया गया है, तो यह कॉन्टेंट देने वाले कॉम्पोनेंट को क्वेरी करने के लिए ऐक्सेस को कंट्रोल करता है. अगर writePermission एट्रिब्यूट सेट किया गया है, तो यह कॉम्पोनेंट के डेटा में बदलाव करने के लिए ऐक्सेस को कंट्रोल करता है.

अनुमतियों के बारे में ज़्यादा जानने के लिए, ऐप्लिकेशन मेनिफ़ेस्ट की खास जानकारी में अनुमतियां सेक्शन और सुरक्षा से जुड़ी सलाहदेखें.

android:process

उस प्रोसेस का नाम जिसमें कॉन्टेंट देने वाला कॉम्पोनेंट चलता है. आम तौर पर, किसी ऐप्लिकेशन के सभी कॉम्पोनेंट, ऐप्लिकेशन के लिए बनाई गई डिफ़ॉल्ट प्रोसेस में चलते हैं. इसका नाम, ऐप्लिकेशन पैकेज के नाम के बराबर होता है.

The <application> एलिमेंट का process एट्रिब्यूट, सभी कॉम्पोनेंट के लिए एक अलग डिफ़ॉल्ट सेट कर सकता है. हालांकि, हर कॉम्पोनेंट, अपने process एट्रिब्यूट की मदद से डिफ़ॉल्ट को बदल सकता है. इससे, आपके ऐप्लिकेशन को एक से ज़्यादा प्रोसेस में फैलाया जा सकता है.

अगर इस एट्रिब्यूट को असाइन किया गया नाम, कॉलन (:) से शुरू होता है, तो ऐप्लिकेशन के लिए एक नई निजी प्रोसेस बनाई जाती है. यह प्रोसेस, ज़रूरत पड़ने पर बनाई जाती है और गतिविधि इसी प्रोसेस में चलती है.

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

android:readPermission

एक अनुमति जो क्लाइंट के पास, कॉन्टेंट देने वाले कॉम्पोनेंट को क्वेरी करने के लिए होनी चाहिए.

अगर कॉम्पोनेंट, android:grantUriPermissions को "true" पर सेट करता है या अगर कोई क्लाइंट, <grant-uri-permission> सबएलिमेंट की शर्तों को पूरा करता है, तो क्लाइंट को कॉन्टेंट देने वाले कॉम्पोनेंट के डेटा को पढ़ने का अस्थायी ऐक्सेस मिल सकता है.

permission और writePermission एट्रिब्यूट भी देखें.

android:syncable
इससे यह तय होता है कि कॉन्टेंट देने वाले कॉम्पोनेंट के कंट्रोल में मौजूद डेटा को किसी सर्वर पर मौजूद डेटा के साथ सिंक किया जा सकता है या नहीं. अगर सिंक किया जा सकता है, तो इसकी वैल्यू "true" होती है. अगर नहीं किया जा सकता, तो इसकी वैल्यू "false" होती है.
android:writePermission

एक अनुमति जो क्लाइंट के पास, कॉन्टेंट देने वाले कॉम्पोनेंट के कंट्रोल में मौजूद डेटा में बदलाव करने के लिए होनी चाहिए.

अगर कॉम्पोनेंट, android:grantUriPermissions को "true" पर सेट करता है या अगर कोई क्लाइंट, <grant-uri-permission> सबएलिमेंट की शर्तों को पूरा करता है, तो क्लाइंट को कॉन्टेंट देने वाले कॉम्पोनेंट के डेटा में बदलाव करने का अस्थायी ऐक्सेस मिल सकता है.

permission और readPermission एट्रिब्यूट भी देखें.

इसमें जोड़ा गया:
एपीआई लेवल 1
इन्हें भी देखें:
कॉन्टेंट देने वाले कॉम्पोनेंट