- البنية:
-
<uri-relative-filter-group android:allow=["true" | "false"]> <data ... /> ... </uri-relative-filter-group>
- المحتوى المضمّن في:
-
<intent-filter>
- يمكن أن تحتوي على ما يلي:
-
<data>
- description:
-
إنشاء قواعد مطابقة
Intent
دقيقة يمكن أن تتضمّن مَعلمات طلب البحث الخاصة بمعرّف الموارد المنتظم (URI) وأجزاء معرّف الموارد المنتظم (URI) يمكن أن تكون القواعد قواعد تضمين (السماح) أو استبعاد (الحظر) ، وذلك استنادًا إلى سمةandroid:allow
. يتم تحديد القواعد المطابقة من خلال سماتpath*
وfragment*
وquery*
للعناصر المضمّنة<data>
.المطابقة
لمطابقة معرّف موارد منتظم، يجب أن يتطابق كل جزء من مجموعة الفلتر المرتبط بمعرّف الموارد المنتظم مع جزء من معرّف الموارد المنتظم. يمكن أن تكون هناك أجزاء من معرّف الموارد المنتظم لم يتم تحديدها في مجموعة الفلاتر النسبية لمعرّف الموارد المنتظم. مثلاً:
<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
يتمّ استخدام علامة OR مع علامات
<data>
خارج<uri-relative-filter-group>
، بينما يتمّ استخدام علامة AND مع علامات<data>
داخل<uri-relative-filter-group>
.راجِع المثال التالي:
<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>
نتيجةً لذلك، لا تتطابق أيّ من سمات
path
المتعددة في<uri-relative-filter-group>
نفسه مع أيّ عنصر:<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>
لكي تعمل بشكل صحيح لأنّ سمات عنوان URL تتعلّق ببعضها البعض على مستوى<intent-filter>
:- إذا لم يتم تحديد قيمة لسمة
scheme
في فلتر الأهداف، يتم تجاهل جميع سمات عناوين URL الأخرى. - إذا لم يتم تحديد قيمة
host
للفلتر، يتم تجاهل سمةport
وجميع سماتpath*
.
يتم تقييم
<data>
العناصر الفرعية لعنصر<intent-filter>
قبل أي علامات<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>
.حالة الاستخدام الشائعة
تخيل أنّ لديك عنوان URL هو
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>
في الواقع، لا يعمل هذا الإجراء. يطابق عنوان URI
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>
يعمل هذا الفلتر لأنّه يتم أولاً تقييم قواعد الحظر التي تحظر مَعلمات الاستعلام غير الفارغة.
لتبسيط الرمز، يمكنك عكس السلوك للسماح بمَعلمات طلب البحث وحظر عناوين URL بدون مَعلمات طلب البحث:
<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)
لمطابقة معرّفات الموارد المنتظمة التي تحتوي على أحرف مُشفَّرة، اكتب الأحرف الأولية غير المشفَّرة في الفلتر، على سبيل المثال:
<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
.عدد العناصر
يمكنك وضع أي عدد من عناصر
<uri-relative-filter-group>
داخل<intent-filter>
.مراجع إضافية
للحصول على معلومات عن آلية عمل فلاتر الأهداف، بما في ذلك قواعد كيفية مطابقة ملفّات تعريف الأهداف مع الفلاتر، يُرجى الاطّلاع على الأهداف وفلاتر الأهداف و فلاتر الأهداف.
للحصول على معلومات عن
<uri-relative-filter-group>
، يُرجى الاطّلاع علىUriRelativeFilterGroup
وUriRelativeFilter
. - إذا لم يتم تحديد قيمة لسمة
- السمات:
-
android:allow
-
ما إذا كانت مجموعة الفلاتر النسبية لمعرّف الموارد المنتظم هذه هي قاعدة تضمين (سماح) بدلاً من
استبعاد (حظر) تكون القيمة التلقائية
"true"
.القيمة الوصف "true"
(تلقائي)في حال تطابق مجموعة الفلاتر النسبية لمعرّف الموارد المنتظم، يتطابق فلتر الأهداف "false"
إذا تطابقت مجموعة الفلتر النسبي لعنوان URL، لن يتطابق فلتر الأهداف.
- تمّت إتاحة هذه الميزة لأول مرة في:
- المستوى 35 من واجهة برمجة التطبيقات
- راجِع أيضًا:
-
<intent-filter>
<data>
يخضع كل من المحتوى وعيّنات التعليمات البرمجية في هذه الصفحة للتراخيص الموضحّة في ترخيص استخدام المحتوى. إنّ Java وOpenJDK هما علامتان تجاريتان مسجَّلتان لشركة Oracle و/أو الشركات التابعة لها.
تاريخ التعديل الأخير: 2024-12-21 (حسب التوقيت العالمي المتفَّق عليه)
[null,null,["تاريخ التعديل الأخير: 2024-12-21 (حسب التوقيت العالمي المتفَّق عليه)"],[],[]]