- सिंटैक्स:
-
<uri-relative-filter-group android:allow=["true" | "false"]> <data ... /> ... </uri-relative-filter-group>
- इसमें शामिल:
-
<intent-filter> - इसमें ये शामिल हो सकते हैं:
-
<data> - description:
-
इससे सटीक
Intentमैच करने के नियम बनाए जा सकते हैं. इनमें यूआरआई क्वेरी पैरामीटर और यूआरआई फ़्रैगमेंट शामिल हो सकते हैं.android:allowएट्रिब्यूट के आधार पर, नियम शामिल करने (अनुमति देने) या बाहर रखने (ब्लॉक करने) वाले हो सकते हैं. मैच करने के नियम, शामिल किए गए<data>एलिमेंट केpath*,fragment*, औरquery*एट्रिब्यूट से तय किए जाते हैं.मैच करना
किसी यूआरआई को मैच करने के लिए, यूआरआई के रिलेटिव फ़िल्टर ग्रुप के हर हिस्से का, यूआरआई के किसी हिस्से से मैच होना ज़रूरी है. यूआरआई के ऐसे हिस्से हो सकते हैं जो यूआरआई के रिलेटिव फ़िल्टर ग्रुप में तय नहीं किए गए हैं. उदाहरण के लिए:
<intent-filter...> <data android:scheme="https" android:host="project.example.com" /> <uri-relative-filter-group android:allow="true"> <data android:query="param1=value1" /> <data android:query="param2=value2" /> </uri-relative-filter-group> ... </intent-filter>
फ़िल्टर,
https://project.example.com/any/path/here?param1=value1¶m2=value2¶m3=value3से मैच करता है, क्योंकि यूआरआई के रिलेटिव फ़िल्टर ग्रुप में तय की गई हर चीज़ मौजूद है. फ़िल्टर, मैचhttps://project.example.com/any/path/here?param2=value2¶m1=value1से भी मैच करता है, क्योंकि क्वेरी पैरामीटर के क्रम से कोई फ़र्क़ नहीं पड़ता. हालांकि, फ़िल्टर,https://project.example.com/any/path/here?param1=value1से मैच नहीं करता, क्योंकि इसमेंparam2=value2मौजूद नहीं है.OR और AND
<data>टैग<uri-relative-filter-group>के बाहर OR किए जाते हैं, जबकि<data>टैग<uri-relative-filter-group>के अंदर AND किए जाते हैं.यहां दिया गया उदाहरण देखें:
<intent-filter...> <data android:scheme="https" android:host="project.example.com" /> <data android:pathPrefix="/prefix" /> <data android:pathSuffix="suffix" /> ... </intent-filter>
फ़िल्टर,
/prefixसे शुरू होने वाले _या_ पर खत्म होने वाले पाथ से मैच करता हैsuffix.इसके उलट, अगले उदाहरण में ऐसे पाथ मैच होते हैं जो
/prefixसे शुरू होते हैं औरsuffixपर खत्म होते हैं:<intent-filter...> <data android:scheme="https" android:host="project.example.com" /> <uri-relative-filter-group> <data android:pathPrefix="/prefix" /> <data android:pathSuffix="suffix" /> </uri-relative-filter-group> ... </intent-filter>
नतीजतन, एक ही
<uri-relative-filter-group>में मौजूद कईpathएट्रिब्यूट किसी भी चीज़ से मैच नहीं होते:<intent-filter...> <data android:scheme="https" android:host="project.example.com" /> <uri-relative-filter-group> <data android:path="/path1" /> <data android:path="/path2" /> </uri-relative-filter-group> ... </intent-filter>
एलान का क्रम
यहां दिया गया उदाहरण देखें:
<intent-filter...> <data android:scheme="https" android:host="project.example.com" /> <uri-relative-filter-group> <data android:fragment="fragment" /> </uri-relative-filter-group> <uri-relative-filter-group android:allow="false"> <data android:fragmentPrefix="fragment" /> </uri-relative-filter-group> ... </intent-filter>
फ़िल्टर,
#fragmentफ़्रैगमेंट से मैच करता है, क्योंकि बाहर रखने के नियम का आकलन करने से पहले ही मैच मिल जाता है. हालांकि,#fragment123जैसे फ़्रैगमेंट मैच नहीं होते.सिबलिंग टैग
<uri-relative-filter-group>टैग, अपने सिबलिंग<data>टैग के साथ मिलकर काम करते हैं. इसका मतलब है कि<data>टैग,<uri-relative-filter-group>के बाहर, लेकिन एक ही<intent-filter>के अंदर मौजूद होते हैं.<uri-relative-filter-group>टैग को ठीक से काम करने के लिए, सिबलिंग<data>टैग का होना ज़रूरी है, क्योंकि यूआरआई एट्रिब्यूट,<intent-filter>लेवल पर एक-दूसरे पर निर्भर होते हैं:- अगर इंटेंट फ़िल्टर के लिए कोई
schemeतय नहीं किया गया है, तो यूआरआई के अन्य सभी एट्रिब्यूट को अनदेखा कर दिया जाता है. - अगर फ़िल्टर के लिए कोई
hostतय नहीं किया गया है, तोportएट्रिब्यूट और सभीpath*एट्रिब्यूट को अनदेखा कर दिया जाता है.
किसी भी
<uri-relative-filter-group>टैग का आकलन करने से पहले,<intent-filter>के<data>चाइल्ड टैग का आकलन किया जाता है. इसके बाद,<uri-relative-filter-group>टैग का आकलन क्रम से किया जाता है. उदाहरण के लिए:<intent-filter...> <data android:scheme="https" android:host="project.example.com" /> <uri-relative-filter-group android:allow="false"> <data android:path="/path" /> <data android:query="query" /> </uri-relative-filter-group> <data android:path="/path" /> ... </intent-filter>
फ़िल्टर,
https://project.example.com/path?queryको स्वीकार करता है, क्योंकि यह<data android:path="/path" />से मैच करता है. यह<uri-relative-filter-group>के बाहर रखने के नियम में शामिल नहीं है.इस्तेमाल का सामान्य उदाहरण
मान लें कि आपके पास यूआरआई
https://project.example.com/pathहै. आपको इसे क्वेरी पैरामीटर की मौजूदगी या वैल्यू के आधार पर, किसीIntentसे मैच करना है.https://project.example.com/pathसे मैच करने औरhttps://project.example.com/path?queryको ब्लॉक करने के लिए, इंटेंट फ़िल्टर बनाने के लिए, यह तरीका आज़माया जा सकता है:<intent-filter...> <data android:scheme="https" android:host="project.example.com" /> <uri-relative-filter-group android:allow="true"> <data android:path="/path" /> </uri-relative-filter-group> ... </intent-filter>
हालांकि, यह तरीका काम नहीं करता.
https://project.example.com/path?queryयूआरआई पाथ/pathसे मैच करता है. साथ ही,<uri-relative-filter-group>टैग, मैच करते समय अतिरिक्त हिस्सों की अनुमति देता है.इंटेंट फ़िल्टर में इस तरह बदलाव करें:
<intent-filter...> <data android:scheme="https" android:host="project.example.com" /> <uri-relative-filter-group android:allow="false"> <data android:path="/path" /> <data android:queryAdvancedPattern=".+" /> </uri-relative-filter-group> <uri-relative-filter-group android:allow="true"> <data android:path="/path" /> </uri-relative-filter-group> ... </intent-filter>
यह फ़िल्टर काम करता है, क्योंकि खाली न होने वाले क्वेरी पैरामीटर को ब्लॉक करने वाले नियमों का आकलन पहले किया जाता है.
कोड को आसान बनाने के लिए, क्वेरी पैरामीटर की अनुमति देने और क्वेरी पैरामीटर के बिना यूआरआई को ब्लॉक करने के लिए, व्यवहार को बदलें:
<intent-filter...> <data android:scheme="https" android:host="project.example.com" /> <uri-relative-filter-group android:allow="true"> <data android:path="/path" /> <data android:queryAdvancedPattern=".+" /> </uri-relative-filter-group> ... </intent-filter>
यूआरआई-एनकोडेड वर्ण
यूआरआई-एनकोडेड वर्णों वाले यूआरआई को मैच करने के लिए, फ़िल्टर में रॉ, अनएनकोडेड वर्ण लिखें उदाहरण के लिए:
<intent-filter...> <data android:scheme="https" android:host="project.example.com" /> <uri-relative-filter-group android:allow="true"> <data android:query="param=value!" /> </uri-relative-filter-group> ... </intent-filter>
फ़िल्टर,
?param=value!और?param=value%21से मैच करता है.हालांकि, अगर फ़िल्टर में एनकोडेड वर्ण इस तरह लिखे जाते हैं, तो:
<intent-filter...> <data android:scheme="https" android:host="project.example.com" /> <uri-relative-filter-group android:allow="true"> <data android:query="param=value%21" /> </uri-relative-filter-group> ... </intent-filter>
फ़िल्टर, न तो
?param=value!और न ही?param=value%21से मैच करता है.एलिमेंट की संख्या
किसी
<intent-filter>में,<uri-relative-filter-group>के किसी भी एलिमेंट को जोड़ा जा सकता है.दूसरे संसाधन
इंटेंट फ़िल्टर के काम करने के तरीके के बारे में जानने के लिए, इंटेंट ऑब्जेक्ट को फ़िल्टर से मैच करने के नियमों के बारे में जानने के लिए, इंटेंट और इंटेंट फ़िल्टर और इंटेंट फ़िल्टर लेख पढ़ें.
<uri-relative-filter-group>के बारे में जानने के लिए,UriRelativeFilterGroupऔरUriRelativeFilterलेख पढ़ें. - अगर इंटेंट फ़िल्टर के लिए कोई
- attributes:
-
android:allow-
यह यूआरआई रिलेटिव फ़िल्टर ग्रुप, बाहर रखने (ब्लॉक करने) के बजाय,
शामिल करने (अनुमति देने) का नियम है या नहीं. डिफ़ॉल्ट वैल्यू
"true"है.वैल्यू ब्यौरा "true"(डिफ़ॉल्ट)अगर यूआरआई रिलेटिव फ़िल्टर ग्रुप मैच करता है, तो इंटेंट फ़िल्टर मैच करता है "false"अगर यूआरआई रिलेटिव फ़िल्टर ग्रुप मैच करता है, तो इंटेंट फ़िल्टर मैच नहीं करता
- पहली बार इसमें दिखाया गया:
- एपीआई लेवल 35
- यह भी देखें:
-
<intent-filter><data>
<uri-relative-filter-group>
इस पेज पर मौजूद कॉन्टेंट और कोड सैंपल कॉन्टेंट के लाइसेंस में बताए गए लाइसेंस के हिसाब से हैं. Java और OpenJDK, Oracle और/या इससे जुड़ी हुई कंपनियों के ट्रेडमार्क या रजिस्टर किए हुए ट्रेडमार्क हैं.
आखिरी बार 2026-04-21 (UTC) को अपडेट किया गया.
[null,null,["आखिरी बार 2026-04-21 (UTC) को अपडेट किया गया."],[],[]]