<डेटा>

सिंटैक्स:
अगर डेटा टैग, <intent-filter> का चाइल्ड है, तो:
<data android:scheme="string"
      android:host="string"
      android:port="string"
      android:path="string"
      android:pathPattern="string"
      android:pathPrefix="string"
      android:pathSuffix="string"
      android:pathAdvancedPattern="string"
      android:mimeType="string" />

अगर डेटा टैग, <uri-relative-filter-group> का चाइल्ड है, तो:
<data
      android:path="string"
      android:pathPattern="string"
      android:pathPrefix="string"
      android:pathSuffix="string"
      android:pathAdvancedPattern="string"
      android:fragment="string"
      android:fragmentPattern="string"
      android:fragmentPrefix="string"
      android:fragmentSuffix="string"
      android:fragmentAdvancedPattern="string"
      android:query="string"
      android:queryPattern="string"
      android:queryPrefix="string"
      android:querySuffix="string"
      android:queryAdvancedPattern="string" />
इसमें शामिल है:
<intent-filter>
<uri-relative-filter-group>
description:
यह इंटेंट फ़िल्टर में डेटा स्पेसिफ़िकेशन जोड़ता है. स्पेसिफ़िकेशन, mimeType एट्रिब्यूट का इस्तेमाल करके डेटा टाइप, यूआरआई या डेटा टाइप और यूआरआई, दोनों हो सकता है. यूआरआई के हर हिस्से के लिए, अलग-अलग एट्रिब्यूट तय किए जाते हैं:

<scheme>://<host>:<port>[<path>|<pathPrefix>|<pathPattern>|<pathAdvancedPattern>|<pathSuffix>]

यूआरआई फ़ॉर्मैट के बारे में बताने वाली ये विशेषताएं ज़रूरी नहीं हैं. हालांकि, ये एक-दूसरे पर निर्भर करती हैं:

  • अगर इंटेंट फ़िल्टर के लिए scheme एट्रिब्यूट की वैल्यू नहीं दी गई है, तो यूआरआई के अन्य सभी एट्रिब्यूट की वैल्यू को अनदेखा कर दिया जाता है.
  • अगर फ़िल्टर के लिए host नहीं दिया गया है, तो port एट्रिब्यूट और सभी पाथ एट्रिब्यूट को अनदेखा कर दिया जाता है.

एक ही <intent-filter> एलिमेंट में मौजूद सभी <data> एलिमेंट, एक ही फ़िल्टर में योगदान देते हैं. इसलिए, उदाहरण के लिए, फ़िल्टर का यह स्पेसिफ़िकेशन:

<intent-filter . . . >
    <data android:scheme="something" android:host="project1.example.com" />
    <data android:scheme="something-else" android:host="project2.example.com" android:path="/page1" />
    ...
</intent-filter>

इसके बराबर है:

<intent-filter . . . >
    <data android:scheme="something" />
    <data android:scheme="something-else" />
    <data android:host="project1.example.com" />
    <data android:host="project2.example.com" />
    <data android:path="/page1" />
    ...
</intent-filter>

<data> एलिमेंट में कई <data> एलिमेंट जोड़े जा सकते हैं, ताकि उसे कई डेटा विकल्प दिए जा सकें.<intent-filter> इसके किसी भी एट्रिब्यूट की डिफ़ॉल्ट वैल्यू नहीं होती.

इंटेंट फ़िल्टर के काम करने के तरीके के बारे में जानकारी के लिए, इंटेंट और इंटेंट फ़िल्टर लेख पढ़ें. इसमें इंटेंट ऑब्जेक्ट को फ़िल्टर से मैच करने के नियमों के बारे में भी बताया गया है. इसके अलावा, मेनिफ़ेस्ट फ़ाइल की खास जानकारी में मौजूद इंटेंट फ़िल्टर सेक्शन देखें.

एट्रिब्यूट:
android:scheme
यह यूआरआई का स्कीम वाला हिस्सा होता है. यूआरआई तय करने के लिए, यह सबसे ज़रूरी एट्रिब्यूट है. फ़िल्टर के लिए, कम से कम एक scheme एट्रिब्यूट सेट किया जाना चाहिए. ऐसा न होने पर, यूआरआई के अन्य एट्रिब्यूट का कोई मतलब नहीं रह जाता.

स्कीम को ट्रेलिंग कोलन के बिना बताया गया है. जैसे, http के बजाय http:.

अगर फ़िल्टर के लिए डेटा टाइप सेट किया गया है (mimeType एट्रिब्यूट का इस्तेमाल करके), लेकिन कोई स्कीम नहीं है, तो content: और file: स्कीम को डिफ़ॉल्ट रूप से लागू माना जाता है.

ध्यान दें: Android फ़्रेमवर्क में स्कीम मैचिंग, RFC के उलट केस-सेंसिटिव होती है. इसलिए, हमेशा छोटे अक्षरों का इस्तेमाल करके स्कीम तय करें.

android:host
यह यूआरआई अथॉरिटी का होस्ट वाला हिस्सा होता है. इस एट्रिब्यूट का कोई मतलब नहीं है, जब तक कि फ़िल्टर के लिए scheme एट्रिब्यूट भी न दिया गया हो. एक से ज़्यादा सबडोमेन से मैच करने के लिए, तारे के चिह्न (*) का इस्तेमाल करें. इससे होस्ट में शून्य या उससे ज़्यादा वर्णों से मैच किया जा सकता है. उदाहरण के लिए, होस्ट *.google.com, www.google.com, .google.com, और developer.google.com से मेल खाता है.

तारे का निशान, होस्ट एट्रिब्यूट का पहला वर्ण होना चाहिए. उदाहरण के लिए, होस्ट google.co.* अमान्य है, क्योंकि ऐस्टरिक वाइल्डकार्ड पहला वर्ण नहीं है.

ध्यान दें: Android फ़्रेमवर्क में होस्ट के नाम का मिलान करते समय, केस-सेंसिटिविटी का ध्यान रखा जाता है. हालांकि, RFC में ऐसा नहीं होता. इसलिए, होस्ट के नाम हमेशा छोटे अक्षरों में लिखें.

android:port
यह यूआरआई अथॉरिटी का पोर्ट वाला हिस्सा होता है. इस एट्रिब्यूट की वैल्यू सिर्फ़ तब काम की होती है, जब फ़िल्टर के लिए scheme और host एट्रिब्यूट भी दिए गए हों.
android:path
android:pathPrefix
android:pathSuffix
android:pathPattern
android:pathAdvancedPattern
यूआरआई का पाथ वाला हिस्सा, जो / से शुरू होना चाहिए. path एट्रिब्यूट, पूरे पाथ की जानकारी देता है. इसका मिलान Intent ऑब्जेक्ट में मौजूद पूरे पाथ से किया जाता है. pathPrefix एट्रिब्यूट, पाथ का वह हिस्सा तय करता है जिसे Intent ऑब्जेक्ट में मौजूद पाथ के सिर्फ़ शुरुआती हिस्से से मैच किया जाता है.

pathSuffix एट्रिब्यूट, Intent ऑब्जेक्ट में मौजूद पाथ के आखिरी हिस्से से पूरी तरह मैच होना चाहिए. साथ ही, इस एट्रिब्यूट की वैल्यू / वर्ण से शुरू होनी ज़रूरी नहीं है.

pathPattern एट्रिब्यूट, एक ऐसा पूरा पाथ तय करता है जिसे Intent ऑब्जेक्ट में मौजूद पूरे पाथ से मैच किया जाता है. हालांकि, इसमें ये वाइल्डकार्ड शामिल हो सकते हैं:

  • पीरियड (.) किसी भी एक वर्ण से मेल खाता है. लिटरल अवधि से मेल खाने के लिए, इसे अपने एक्सएमएल में \\. के तौर पर एस्केप करें.
  • तारे (*) का इस्तेमाल, ठीक पहले वाले वर्ण के शून्य से लेकर कई बार दिखने वाले क्रम से मेल खाने के लिए किया जाता है. उदाहरण के लिए, a*, "a" और "aa" से मेल खाता है, लेकिन खाली स्ट्रिंग से मेल नहीं खाता.
  • बिंदु के बाद तारांकन (.*) का इस्तेमाल करने पर, यह शून्य या उससे ज़्यादा वर्णों के किसी भी क्रम से मेल खाता है. उदाहरण के लिए, .* एक खाली स्ट्रिंग से मेल खाता है. वहीं, b.* "b", "bc", और "bcd" से मेल खाता है.

pathPattern के लिए ज़रूरी बातें:

  • बैकट्रैकिंग नहीं: Android का पैटर्न मैच करने वाला टूल, बैकट्रैकिंग के बिना एक ही फ़ॉरवर्ड पास में स्ट्रिंग का आकलन करता है. अगर वाइल्डकार्ड ऐसे वर्णों का इस्तेमाल करता है जिनकी ज़रूरत बाद में पैटर्न में होती है, तो मैच नहीं होगा.
  • .* is Lazy: .* वाइल्डकार्ड लेज़ी है. यह पैटर्न में मौजूद अगले लिटरल वर्ण की पहली बार दिखने तक वर्णों का इस्तेमाल करता है.
    • "abc.*xyz", "abcpxqrxyz" से मेल नहीं खाएगा. .*, पहले "x" ("px..." से) पर रुक जाता है. बाकी स्ट्रिंग "qrxyz", अनुमानित "yz" से मैच नहीं होती.
    • चेतावनी: .* को रोकने के लिए, .* वर्णों का एग्ज़ैक्ट मैच ढूंढता है. इसलिए, "a.*.c", नहीं मैच करेगा."abbbc" मैचर, दूसरे . को लिटरल पीरियड के तौर पर देखता है और स्ट्रिंग में "." ढूंढता है. हालांकि, स्ट्रिंग के आखिर तक पहुंचने पर उसे "." नहीं मिलता.
  • * लालची है: कोई खास वर्ण, जिसके बाद स्टार (जैसे कि a*) हो, लालची होता है. यह वर्ण के सभी लगातार दिखने वाले उदाहरणों को इस्तेमाल करता है.
    • "a*a", "aaa" जैसी स्ट्रिंग से मेल नहीं खाएगा. a* वाला हिस्सा, तीनों "a" को पूरी तरह से इस्तेमाल कर लेता है. पैटर्न के हिसाब से, इसके बाद "a" होना चाहिए. हालांकि, स्ट्रिंग पहले ही खत्म हो चुकी है. इसलिए, मैच नहीं हो सका.
  • सबसे सही तरीके:
    • ऐसे पैटर्न से बचें जिनमें * के ठीक बाद आने वाला वर्ण, उससे पहले आने वाले वर्ण (जैसे, a*a) के जैसा हो.
    • .* के तुरंत बाद वाइल्डकार्ड न रखें. उदाहरण के लिए, .*. या .*.*.
    • अगर आपको किसी प्रीफ़िक्स से मैच करना है, तो pathPattern को .* से खत्म करने के बजाय, android:pathPrefix का इस्तेमाल करना ज़्यादा सुरक्षित और असरदार होता है.

pathAdvancedPattern एट्रिब्यूट, पूरा पाथ तय करता है. इसका मिलान Intent ऑब्जेक्ट के पूरे पाथ से किया जाता है. साथ ही, यह रेगुलर एक्सप्रेशन (रेगेक्स) जैसे इन पैटर्न के साथ काम करता है:

  • पीरियड (.) किसी भी वर्ण से मेल खाता है.
  • सेट ([...]), वर्णों की रेंज से मेल खाता है. उदाहरण के लिए, [0-5] 0 से 5 के बीच के किसी भी अंक से मैच करता है, लेकिन 6 से 9 के बीच के किसी भी अंक से मैच नहीं करता. [a-zA-Z] किसी भी अक्षर से मेल खाता है, भले ही वह कैपिटल लेटर हो या स्मॉल लेटर. सेट में "not" ^ मॉडिफ़ायर का इस्तेमाल भी किया जा सकता है.
  • तारे (*) का इस्तेमाल करके, पिछले पैटर्न को शून्य या उससे ज़्यादा बार मैच किया जा सकता है.
  • प्लस (+) मॉडिफ़ायर, पिछले पैटर्न से एक या उससे ज़्यादा बार मैच करता है.
  • रेंज ({...}) मॉडिफ़ायर से यह तय होता है कि कोई पैटर्न कितनी बार मैच हो सकता है.
pathAdvancedPattern मैच करने वाला फ़ंक्शन, आकलन को लागू करने का एक तरीका है. इसमें पैटर्न से मैच करने की प्रोसेस रीयल टाइम में होती है. साथ ही, इसमें बैकट्रैकिंग की सुविधा नहीं होती.

\ का इस्तेमाल एस्केप कैरेक्टर के तौर पर किया जाता है. ऐसा तब होता है, जब स्ट्रिंग को एक्सएमएल से पढ़ा जाता है. इसलिए, पैटर्न के तौर पर पार्स किए जाने से पहले, आपको इसे दो बार एस्केप करना होगा. उदाहरण के लिए, लिटरल * को \\* के तौर पर लिखा जाता है और लिटरल \ को \\\\ के तौर पर लिखा जाता है. यह Java कोड में स्ट्रिंग बनाते समय लिखे जाने वाले कोड जैसा होता है.

इन पांच तरह के पैटर्न के बारे में ज़्यादा जानने के लिए, PatternMatcher क्लास में PATTERN_LITERAL, PATTERN_PREFIX, PATTERN_SIMPLE_GLOB, PATTERN_SUFFIX, और PATTERN_ADVANCED_GLOB के ब्यौरे देखें.

इन एट्रिब्यूट का इस्तेमाल सिर्फ़ तब किया जा सकता है, जब फ़िल्टर के लिए scheme और host एट्रिब्यूट भी दिए गए हों.

pathSuffix और pathAdvancedPattern को एपीआई लेवल 31 में पेश किया गया था.

android:fragment
android:fragmentPrefix
android:fragmentSuffix
android:fragmentPattern
android:fragmentAdvancedPattern

यह यूआरआई फ़्रैगमेंट के लिए मैच करने वाला फ़ंक्शन है. # प्रीफ़िक्स शामिल न करें. हर एट्रिब्यूट के लिए, वैल्यू के मतलब और स्वीकार किए गए पैटर्न के बारे में जानने के लिए, ऊपर दिया गया सेक्शन देखें.

आम तौर पर यूआरआई में कोड किए जाने वाले वर्णों से मेल खाने के लिए, एट्रिब्यूट की वैल्यू में रॉ (बिना कोड किया गया) फ़ॉर्म शामिल करें. उदाहरण के लिए, <data android:fragment="test!" />, #test! और #test%21 से मेल खाता है.

इसे एपीआई लेवल 35 में पेश किया गया था.

android:query
android:queryPrefix
android:querySuffix
android:queryPattern
android:queryAdvancedPattern

यूआरआई क्वेरी पैरामीटर के लिए मैच करने वाला (और, चाहें तो वैल्यू भी). उदाहरण के लिए, <data android:query="param=value" /> की मदद से, ?param=value से खत्म होने वाले यूआरआई से मैच किया जा सकता है. ? प्रीफ़िक्स शामिल न करें. हर एट्रिब्यूट के लिए, ऊपर दी गई वैल्यू और पैटर्न के बारे में जानें.

आम तौर पर यूआरआई-कोड में शामिल किए जाने वाले वर्णों से मेल खाने के लिए, एट्रिब्यूट की वैल्यू में रॉ (नॉनकोडेड) फ़ॉर्म शामिल करें. उदाहरण के लिए, <data android:query="test!" />, ?test! और ?test%21 से मेल खाता है.

इसे एपीआई लेवल 35 में पेश किया गया था.

android:mimeType
MIME मीडिया टाइप, जैसे कि image/jpeg या audio/mpeg4-generic. उप-टाइप के तौर पर, तारे के निशान वाले वाइल्डकार्ड (*) का इस्तेमाल किया जा सकता है. इससे पता चलता है कि कोई भी उप-टाइप मेल खाता है.

आम तौर पर, इंटेंट फ़िल्टर एक <data> एलिमेंट का एलान करता है. इसमें सिर्फ़ android:mimeType एट्रिब्यूट शामिल होता है.

ध्यान दें: Android फ़्रेमवर्क में MIME टाइप मैचिंग, केस-सेंसिटिव होती है. हालांकि, फ़ॉर्मल RFC MIME टाइप में ऐसा नहीं होता. इसलिए, MIME टाइप हमेशा छोटे अक्षरों में तय करें.

पहली बार इसमें दिखाया गया:
एपीआई लेवल 1
यह भी देखें:
<action>
<category>