<ডেটা>

সিনট্যাক্স:
যদি ডেটা ট্যাগটি একটি <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>
বর্ণনা:
একটি ইন্টেন্ট ফিল্টারে একটি ডেটা স্পেসিফিকেশন যোগ করে। এই স্পেসিফিকেশনটি হলো একটি ডেটা টাইপ mimeType অ্যাট্রিবিউট ব্যবহার করে), একটি URI, অথবা ডেটা টাইপ ও URI উভয়ই। একটি URI তার প্রতিটি অংশের জন্য আলাদা অ্যাট্রিবিউটের মাধ্যমে নির্দিষ্ট করা হয়:

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

URI ফরম্যাট নির্দিষ্টকারী এই অ্যাট্রিবিউটগুলো ঐচ্ছিক, কিন্তু পরস্পর নির্ভরশীল:

  • ইন্টেন্ট ফিল্টারের জন্য কোনো scheme নির্দিষ্ট করা না থাকলে, অন্য সব URI অ্যাট্রিবিউট উপেক্ষা করা হয়।
  • ফিল্টারের জন্য কোনো 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>

একটি <intent-filter> কে একাধিক ডেটা অপশন দেওয়ার জন্য আপনি এর ভিতরে যেকোনো সংখ্যক <data> এলিমেন্ট রাখতে পারেন। এর কোনো অ্যাট্রিবিউটেরই ডিফল্ট মান নেই।

ইনটেন্ট ফিল্টার কীভাবে কাজ করে, এবং ফিল্টারের সাথে ইনটেন্ট অবজেক্টগুলো কীভাবে মেলানো হয় তার নিয়মাবলী সম্পর্কে জানতে, ম্যানিফেস্ট ফাইল ওভারভিউ-এর 'ইনটেন্টস অ্যান্ড ইনটেন্ট ফিল্টারস' এবং 'ইনটেন্ট ফিল্টারস' বিভাগটি দেখুন।

বৈশিষ্ট্য:
android:scheme
একটি URI-এর স্কিম অংশ। একটি URI নির্দিষ্ট করার জন্য এটি ন্যূনতম অপরিহার্য অ্যাট্রিবিউট। ফিল্টারটির জন্য অন্তত একটি scheme অ্যাট্রিবিউট অবশ্যই সেট করতে হবে, অন্যথায় URI-এর অন্য কোনো অ্যাট্রিবিউটেরই কোনো অর্থ থাকে না।

স্কিম নির্দিষ্ট করার সময় শেষে কোলন ব্যবহার করা হয় না, যেমন http http: এর পরিবর্তে http লেখা হয়।

যদি ফিল্টারে ডেটা টাইপ সেট করা থাকে ( mimeType অ্যাট্রিবিউট ব্যবহার করে) কিন্তু কোনো স্কিম না থাকে, তাহলে content: এবং file: স্কিমগুলো ধরে নেওয়া হয়।

দ্রষ্টব্য : RFC-এর মতো নয়, অ্যান্ড্রয়েড ফ্রেমওয়ার্কে স্কিম মেলানো কেস-সেনসিটিভ। তাই, সর্বদা ছোট হাতের অক্ষর ব্যবহার করে স্কিম উল্লেখ করুন।

android:host
একটি URI অথরিটির হোস্ট অংশ। ফিল্টারের জন্য একটি scheme অ্যাট্রিবিউটও নির্দিষ্ট করা না থাকলে এই অ্যাট্রিবিউটটির কোনো অর্থ থাকে না। একাধিক সাবডোমেন মেলানোর জন্য, হোস্টে শূন্য বা তার বেশি অক্ষর মেলাতে একটি অ্যাস্টারিস্ক ( * ) ব্যবহার করুন। উদাহরণস্বরূপ, *.google.com হোস্টটি www.google.com , .google.com , এবং developer.google.com মেলায়।

হোস্ট অ্যাট্রিবিউটের প্রথম অক্ষর হিসেবে অ্যাস্টারিস্ক অবশ্যই থাকতে হবে। উদাহরণস্বরূপ, google.co.* হোস্টটি অবৈধ, কারণ অ্যাস্টারিস্ক ওয়াইল্ডকার্ডটি এর প্রথম অক্ষর নয়।

দ্রষ্টব্য : আনুষ্ঠানিক RFC-এর মতো নয়, অ্যান্ড্রয়েড ফ্রেমওয়ার্কে হোস্ট নেম মেলানোর বিষয়টি কেস-সেনসিটিভ। তাই, সর্বদা ছোট হাতের অক্ষর ব্যবহার করে হোস্ট নেম উল্লেখ করুন।

android:port
একটি URI অথরিটির পোর্ট অংশ। এই অ্যাট্রিবিউটটি কেবল তখনই অর্থবহ হয়, যখন ফিল্টারটির জন্য scheme এবং host অ্যাট্রিবিউটগুলোও নির্দিষ্ট করা থাকে।
android:path
android:pathPrefix
android:pathSuffix
android:pathPattern
android:pathAdvancedPattern
একটি URI-এর পাথ অংশ, যা অবশ্যই একটি / দিয়ে শুরু হতে হবে। path অ্যাট্রিবিউট একটি সম্পূর্ণ পাথ নির্দিষ্ট করে, যা একটি Intent অবজেক্টের সম্পূর্ণ পাথের সাথে মেলানো হয়। pathPrefix অ্যাট্রিবিউট একটি আংশিক পাথ নির্দিষ্ট করে, যা Intent অবজেক্টের পাথের শুধুমাত্র প্রাথমিক অংশের সাথে মেলানো হয়।

pathSuffix অ্যাট্রিবিউটটি Intent অবজেক্টের পাথের শেষ অংশের সাথে হুবহু মেলানো হয়, এবং এই অ্যাট্রিবিউটটি / অক্ষর দিয়ে শুরু হওয়া আবশ্যক নয়।

pathPattern অ্যাট্রিবিউটটি একটি সম্পূর্ণ পাথ নির্দিষ্ট করে, যা Intent অবজেক্টের সম্পূর্ণ পাথের সাথে মেলানো হয়, কিন্তু এতে নিম্নলিখিত ওয়াইল্ডকার্ডগুলো থাকতে পারে:

  • একটি পিরিয়ড ( . ) যেকোনো একটি অক্ষরকে বোঝায়। আক্ষরিক পিরিয়ডকে বোঝানোর জন্য, আপনার XML-এ এটিকে \\. হিসেবে এস্কেপ করুন।
  • একটি অ্যাস্টারিস্ক ( * ) তার ঠিক আগের অক্ষরটির শূন্য থেকে একাধিকবার পুনরাবৃত্তির একটি অনুক্রমকে ম্যাচ করে। উদাহরণস্বরূপ, a* "a" এবং "aa" কে ম্যাচ করে, কিন্তু একটি খালি স্ট্রিংকে ম্যাচ করে না।
  • একটি পিরিয়ডের পরে একটি অ্যাস্টারিস্ক ( .* ) শূন্য বা তার বেশি অক্ষরের যেকোনো অনুক্রমকে ম্যাচ করে। উদাহরণস্বরূপ, .* একটি খালি স্ট্রিংকে ম্যাচ করে, এবং b.* "b", "bc", ও "bcd"-কে ম্যাচ করে।

pathPattern জন্য গুরুত্বপূর্ণ বিবেচ্য বিষয়সমূহ:

  • ব্যাকট্র্যাকিং নেই: অ্যান্ড্রয়েডের প্যাটার্ন ম্যাচিং টুল ব্যাকট্র্যাকিং ছাড়াই একবারে স্ট্রিং মূল্যায়ন করে। যদি কোনো ওয়াইল্ডকার্ড প্যাটার্নের পরবর্তী অংশে প্রয়োজনীয় অক্ষর ব্যবহার করে ফেলে, তাহলে ম্যাচটি ব্যর্থ হবে।
  • .* লেজি: .* ওয়াইল্ডকার্ডটি লেজি। এটি প্যাটার্নটিতে পরবর্তী আক্ষরিক অক্ষরটির প্রথম উপস্থিতি না পাওয়া পর্যন্ত অক্ষর গ্রহণ করতে থাকে।
    • "abc.*xyz" "abcpxqrxyz" এর সাথে মিলবে না.* চিহ্নটি ( "px..." থেকে) প্রথম "x" এর পর অলসভাবে থেমে যায়। অবশিষ্ট স্ট্রিং "qrxyz" প্রত্যাশিত "yz" এর সাথে মেলে না।
    • সতর্কীকরণ: যেহেতু .* একটি নির্দিষ্ট অক্ষরের মিল খুঁজে থেমে যায়, "a.*.c" "abbbc" এর সাথে মিলবে না । ম্যাচিং ফাংশনটি দ্বিতীয় . চিহ্নটিকে একটি আক্ষরিক পিরিয়ড (.) হিসেবে গণ্য করে এবং স্ট্রিংটিতে একটি "." খোঁজার জন্য স্ক্যান করে, এবং শেষে পৌঁছালে ব্যর্থ হয়।
  • * হলো গ্রিডি: কোনো নির্দিষ্ট অক্ষরের পরে একটি অ্যাস্টারিস্ক (যেমন a* ) থাকলে, সেটি গ্রিডি হিসেবে গণ্য হয়। এটি সামনে না দেখে সেই অক্ষরটির পরবর্তী সমস্ত উপস্থিতি গ্রহণ করে।
    • "a*a" "aaa" এর মতো স্ট্রিংয়ের সাথে মিলবে নাa* অংশটি লোভীভাবে তিনটি "a" -কেই গ্রহণ করে। এরপর প্যাটার্নটি শেষের "a" আশা করে, কিন্তু স্ট্রিংটিতে ইতিমধ্যেই তা শেষ হয়ে যাওয়ায় মিলটি ব্যর্থ হয়।
  • সর্বোত্তম অনুশীলন:
    • এমন প্যাটার্ন পরিহার করুন যেখানে * চিহ্নের ঠিক পরের অক্ষরটি তার আগের অক্ষরের সমান হয় (যেমন, a*a )।
    • .* এর ঠিক পরেই ওয়াইল্ডকার্ড বসানো পরিহার করুন (যেমন, .*. বা .*.* )।
    • যদি আপনি কোনো প্রিফিক্স মেলাতে চান, তাহলে pathPattern এর শেষে .* ব্যবহার করার পরিবর্তে android:pathPrefix ব্যবহার করা অধিকতর নিরাপদ ও কার্যকর।

pathAdvancedPattern অ্যাট্রিবিউটটি একটি সম্পূর্ণ পাথ নির্দিষ্ট করে, যা Intent অবজেক্টের সম্পূর্ণ পাথের সাথে মেলানো হয় এবং নিম্নলিখিত রেজেক্স-সদৃশ প্যাটার্নগুলো সমর্থন করে:

  • একটি পিরিয়ড ( . ) যেকোনো অক্ষরের সাথে মেলে।
  • একটি সেট ( [...] ) অক্ষরের পরিসরকে মেলায়। উদাহরণস্বরূপ, [0-5] ০ থেকে ৫ পর্যন্ত যেকোনো একটি অঙ্ককে মেলায়, কিন্তু ৬ থেকে ৯ পর্যন্ত নয় [a-zA-Z] কেস নির্বিশেষে যেকোনো অক্ষরকে মেলায়। সেট "not" ^ মডিফায়ারটিও সমর্থন করে।
  • অ্যাস্টারিস্ক ( * ) মডিফায়ারটি পূর্ববর্তী প্যাটার্নকে শূন্য বা তার বেশি বার ম্যাচ করে।
  • প্লাস ( + ) চিহ্নটি পূর্ববর্তী প্যাটার্নকে এক বা একাধিকবার মেলায়।
  • রেঞ্জ ( {...} ) মডিফায়ারটি নির্দিষ্ট করে যে একটি প্যাটার্ন কতবার মিলতে পারবে।
pathAdvancedPattern ম্যাচিং টুলটি একটি ইভ্যালুয়েশন ইমপ্লিমেন্টেশন, যেখানে কোনো ব্যাকট্র্যাকিং সাপোর্ট ছাড়াই রিয়েল টাইমে প্যাটার্নের সাথে ম্যাচিং করা হয়।

যেহেতু XML থেকে স্ট্রিং পড়ার সময়, এটিকে প্যাটার্ন হিসেবে পার্স করার আগে \ একটি এস্কেপ ক্যারেক্টার হিসেবে ব্যবহৃত হয়, তাই আপনাকে ডাবল-এস্কেপ করতে হবে। উদাহরণস্বরূপ, একটি লিটারেল * \\* হিসেবে এবং একটি লিটারেল \ \\\\ হিসেবে লেখা হয়। জাভা কোডে স্ট্রিং তৈরি করার সময় আপনি ঠিক এভাবেই লেখেন।

এই পাঁচ ধরনের প্যাটার্ন সম্পর্কে আরও তথ্যের জন্য, PatternMatcher ক্লাসের PATTERN_LITERAL , PATTERN_PREFIX , PATTERN_SIMPLE_GLOB , PATTERN_SUFFIX এবং PATTERN_ADVANCED_GLOB এর বিবরণ দেখুন।

এই অ্যাট্রিবিউটগুলো তখনই অর্থবহ হয়, যখন ফিল্টারটির জন্য scheme এবং host অ্যাট্রিবিউটগুলোও নির্দিষ্ট করা থাকে।

API লেভেল ৩১-এ pathSuffix এবং pathAdvancedPattern চালু করা হয়েছিল।

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

একটি URI খণ্ডাংশের জন্য ম্যাচিং অ্যাট্রিবিউট। # উপসর্গটি অন্তর্ভুক্ত করবেন না। প্রতিটি অ্যাট্রিবিউটের অর্থ এবং অনুমোদিত প্যাটার্ন জানতে উপরে দেখুন।

যেসব ক্যারেক্টার সাধারণত URI এনকোড করা থাকে, সেগুলোকে ম্যাচ করার জন্য অ্যাট্রিবিউটের ভ্যালুতে তাদের মূল (নন-এনকোডেড) রূপটি অন্তর্ভুক্ত করুন। উদাহরণস্বরূপ, <data android:fragment="test!" /> অ্যাট্রিবিউটটি #test! এবং #test%21 উভয়কেই ম্যাচ করে।

এপিআই লেভেল ৩৫-এ চালু করা হয়েছে।

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

একটি URI কোয়েরি প্যারামিটার (এবং, ঐচ্ছিকভাবে, একটি ভ্যালু)-এর জন্য একটি ম্যাচিং ব্যবস্থা। উদাহরণস্বরূপ, আপনি <data android:query="param=value" /> ব্যবহার করে ?param=value দিয়ে শেষ হওয়া URI-গুলোকে ম্যাচ করতে পারেন। ? প্রিফিক্সটি অন্তর্ভুক্ত করবেন না। প্রতিটি অ্যাট্রিবিউটের অর্থ এবং অনুমোদিত প্যাটার্ন জানতে উপরে দেখুন।

যেসব ক্যারেক্টার সাধারণত URI-এনকোডেড থাকে, সেগুলোকে ম্যাচ করার জন্য অ্যাট্রিবিউটের ভ্যালুতে তাদের আসল (নন-এনকোডেড) রূপটি অন্তর্ভুক্ত করুন। উদাহরণস্বরূপ, <data android:query="test!" /> অ্যাট্রিবিউটটি ?test! এবং ?test%21 ম্যাচ করে।

এপিআই লেভেল ৩৫-এ চালু করা হয়েছে।

android:mimeType
একটি MIME মিডিয়া টাইপ, যেমন image/jpeg বা audio/mpeg4-generic । সাবটাইপটি অ্যাস্টারিস্ক ওয়াইল্ডকার্ড ( * ) হতে পারে, যা নির্দেশ করে যে যেকোনো সাবটাইপ এর সাথে মিলবে।

সাধারণত ইন্টেন্ট ফিল্টারে এমন একটি <data> এলিমেন্ট ঘোষণা করা হয়, যাতে শুধুমাত্র android:mimeType অ্যাট্রিবিউটটি অন্তর্ভুক্ত থাকে।

দ্রষ্টব্য : আনুষ্ঠানিক RFC MIME টাইপগুলোর মতো নয়, অ্যান্ড্রয়েড ফ্রেমওয়ার্কে MIME টাইপ মেলানো কেস-সেনসিটিভ। তাই, সর্বদা ছোট হাতের অক্ষর ব্যবহার করে MIME টাইপ উল্লেখ করুন।

এতে প্রবর্তন করা হয়েছিল:
এপিআই স্তর ১
আরও দেখুন:
<action>
<category>