- सिंटैक्स:
-
<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
- इन्हें भी देखें:
- कॉन्टेंट देने वाले कॉम्पोनेंट
<provider>
इस पेज पर मौजूद कॉन्टेंट और कोड सैंपल कॉन्टेंट के लाइसेंस में बताए गए लाइसेंस के हिसाब से हैं. Java और OpenJDK, Oracle और/या इससे जुड़ी हुई कंपनियों के ट्रेडमार्क या रजिस्टर किए हुए ट्रेडमार्क हैं.
आखिरी बार 2026-07-03 (UTC) को अपडेट किया गया.
[null,null,["आखिरी बार 2026-07-03 (UTC) को अपडेट किया गया."],[],[]]