<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: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() तरीके को कॉल करें. इसमें अन्य आर्ग्युमेंट के अलावा, एक यूआरआई भी शामिल होता है. यह यूआरआई, सेवा देने वाली कंपनी की पहचान करता है:

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".

<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: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
इन्हें भी देखें:
कॉन्टेंट देने वाली कंपनियां