<uri-রিলেটিভ-ফিল্টার-গ্রুপ>

সিনট্যাক্স:
<uri-relative-filter-group android:allow=["true" | "false"]>
  <data ... />
  ...
</uri-relative-filter-group>
এর মধ্যে রয়েছে:
<intent-filter>
থাকতে পারে:
<data>
বর্ণনা:
সুনির্দিষ্ট Intent ম্যাচিং নিয়ম তৈরি করে যাতে URI ক্যোয়ারী প্যারামিটার এবং URI টুকরা অন্তর্ভুক্ত থাকতে পারে। android: allow অ্যাট্রিবিউটের উপর নির্ভর করে নিয়মগুলি অন্তর্ভুক্তি ( অনুমতি ) নিয়ম বা বর্জন ( ব্লকিং ) নিয়ম হতে পারে। মিলিত নিয়মগুলি path* , fragment* , এবং query* বৈশিষ্ট্য দ্বারা নির্দিষ্ট করা হয় <data> উপাদানগুলির।

ম্যাচিং

একটি URI-এর সাথে মেলাতে, URI আপেক্ষিক ফিল্টার গ্রুপের প্রতিটি অংশ অবশ্যই URI-এর একটি অংশের সাথে মেলে। URI-এর এমন কিছু অংশ থাকতে পারে যা URI আপেক্ষিক ফিল্টার গ্রুপে নির্দিষ্ট করা নেই। যেমন:

<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&param2=value2&param3=value3 এর সাথে মেলে কারণ URI আপেক্ষিক ফিল্টার গ্রুপ দ্বারা নির্দিষ্ট করা সবকিছুই উপস্থিত রয়েছে। ফিল্টারটি https://project.example.com/any/path/here?param2=value2&param1=value1 সাথেও মেলে কারণ কোয়েরি প্যারামিটারের ক্রম কোন ব্যাপার নয়। যাইহোক, ফিল্টারটি https://project.example.com/any/path/here?param1=value1 এর সাথে মেলে না, যেটিতে param2=value2 অনুপস্থিত।

বা এবং এবং

একটি <uri-relative-filter-group> এর বাইরে <data> ট্যাগগুলি ORed হয়, যখন একটি <uri-relative-filter-group> এর ভিতরে <data> ট্যাগগুলি ANDed হয়৷

নিম্নলিখিত উদাহরণ বিবেচনা করুন:

<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> ট্যাগ থাকতে হবে কারণ URI বৈশিষ্ট্যগুলি <intent-filter> স্তরে পারস্পরিকভাবে নির্ভরশীল:

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

সাধারণ ব্যবহারের ক্ষেত্রে

কল্পনা করুন আপনার কাছে URI 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 URI পাথ /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>

এই ফিল্টারটি কাজ করে কারণ ব্লক করার নিয়ম যা খালি কোয়েরি প্যারামিটারগুলিকে নিষিদ্ধ করে তা প্রথমে মূল্যায়ন করা হয়।

কোডটি সরল করতে, ক্যোয়ারী প্যারামিটারগুলিকে অনুমতি দেওয়ার জন্য আচরণটি ফ্লিপ করুন এবং ক্যোয়ারী প্যারামিটার ছাড়াই URI গুলিকে ব্লক করুন:

<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>

URI-এনকোড করা অক্ষর

URI-এনকোড করা অক্ষর ধারণ করে এমন URI-এর সাথে মেলানোর জন্য, ফিল্টারে কাঁচা, আনকোড করা অক্ষরগুলি লিখুন, উদাহরণস্বরূপ:

<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
এই URI আপেক্ষিক ফিল্টার গ্রুপটি একটি বর্জন ( ব্লকিং ) নিয়মের পরিবর্তে একটি অন্তর্ভুক্তি ( অনুমতি দিন ) নিয়ম কিনা। ডিফল্ট মান হল "true"
মান বর্ণনা
"true" (ডিফল্ট) যদি URI আপেক্ষিক ফিল্টার গ্রুপ মিলে যায়, তাহলে অভিপ্রায় ফিল্টার মিলে যায়
"false" যদি ইউআরআই আপেক্ষিক ফিল্টার গ্রুপ মেলে, অভিপ্রায় ফিল্টার মেলে না
প্রবর্তিত:
API স্তর 35
এছাড়াও দেখুন:
<intent-filter>
<data>