- सिंटैक्स:
-
<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
- इन्हें भी देखें:
- कॉन्टेंट देने वाली कंपनियां
<provider>
इस पेज पर मौजूद कॉन्टेंट और कोड सैंपल कॉन्टेंट के लाइसेंस में बताए गए लाइसेंस के हिसाब से हैं. Java और OpenJDK, Oracle और/या इससे जुड़ी हुई कंपनियों के ट्रेडमार्क या रजिस्टर किए हुए ट्रेडमार्क हैं.
आखिरी बार 2026-07-01 (UTC) को अपडेट किया गया.
[[["समझने में आसान है","easyToUnderstand","thumb-up"],["मेरी समस्या हल हो गई","solvedMyProblem","thumb-up"],["अन्य","otherUp","thumb-up"]],[["वह जानकारी मौजूद नहीं है जो मुझे चाहिए","missingTheInformationINeed","thumb-down"],["बहुत मुश्किल है / बहुत सारे चरण हैं","tooComplicatedTooManySteps","thumb-down"],["पुराना","outOfDate","thumb-down"],["अनुवाद से जुड़ी समस्या","translationIssue","thumb-down"],["सैंपल / कोड से जुड़ी समस्या","samplesCodeIssue","thumb-down"],["अन्य","otherDown","thumb-down"]],["आखिरी बार 2026-07-01 (UTC) को अपडेट किया गया."],[],[]]