- सिंटैक्स:
-
<uri-relative-filter-group android:allow=["true" | "false"]> <data ... /> ... </uri-relative-filter-group>
- इनमें शामिल है:
-
<intent-filter>
- इसमें ये चीज़ें शामिल हो सकती हैं:
-
<data>
- जानकारी:
-
मैच करने के सटीक
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
<uri-relative-filter-group>
के बाहर मौजूद<data>
टैग के लिए OR का इस्तेमाल किया जाता है, जबकि<uri-relative-filter-group>
के अंदर मौजूद<data>
टैग के लिए 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*
एट्रिब्यूट को अनदेखा कर दिया जाता है.
<intent-filter>
के<data>
चाइल्ड टैग का आकलन, किसी भी<uri-relative-filter-group>
टैग से पहले किया जाता है. इसके बाद,<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
देखें. - अगर इंटेंट फ़िल्टर के लिए कोई
- एट्रिब्यूट:
-
android:allow
-
क्या यह यूआरआई रिलेटिव फ़िल्टर ग्रुप, बाहर रखे गए (ब्लॉक करने) नियम के बजाय, शामिल किए गए (अनुमति देने) नियम है. डिफ़ॉल्ट वैल्यू
"true"
है.वैल्यू ब्यौरा "true"
(डिफ़ॉल्ट)अगर यूआरआई का रिलेटिव फ़िल्टर ग्रुप मैच करता है, तो इंटेंट फ़िल्टर मैच करता है "false"
अगर यूआरआई का रिलेटिव फ़िल्टर ग्रुप मैच करता है, तो इंटेंट फ़िल्टर मैच नहीं करता
- पहली बार इसमें दिखाया गया:
- एपीआई लेवल 35
- यह भी देखें:
-
<intent-filter>
<data>
इस पेज पर मौजूद कॉन्टेंट और कोड सैंपल कॉन्टेंट के लाइसेंस में बताए गए लाइसेंस के हिसाब से हैं. Java और OpenJDK, Oracle और/या इससे जुड़ी हुई कंपनियों के ट्रेडमार्क या रजिस्टर किए हुए ट्रेडमार्क हैं.
आखिरी बार 2024-12-21 (UTC) को अपडेट किया गया.
[null,null,["आखिरी बार 2024-12-21 (UTC) को अपडेट किया गया."],[],[]]