- بنية الجملة:
-
<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>المضمّنة.المطابقة
لمطابقة معرّف موارد منتظم (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¶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
يتم ربط علامات
<data>خارج<uri-relative-filter-group>باستخدام عامل OR، بينما يتم ربط علامات<data>داخل<uri-relative-filter-group>باستخدام عامل 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>مماثلة لتعمل بشكل سليم لأنّ سمات URI تعتمد على بعضها البعض على مستوى<intent-filter>:- إذا لم يتم تحديد
schemeلفلتر الأهداف، سيتم تجاهل جميع سمات معرّف الموارد المنتظم الأخرى. - إذا لم يتم تحديد
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>.حالة الاستخدام الشائعة
لنفترض أنّ لديك عنوان URI
https://project.example.com/path، وتريد مطابقته معIntentاستنادًا إلى توفّر مَعلمة طلب بحث أو قيمتها. لإنشاء intent filter يطابق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 على النحو التالي:
<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)
لمطابقة معرّفات الموارد المنتظمة التي تحتوي على أحرف مشفّرة، اكتب الأحرف الأولية غير المشفّرة في الفلتر، على سبيل المثال:
<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-
تحدّد ما إذا كانت مجموعة الفلاتر النسبية لمعرّف الموارد المنتظم (URI) هي قاعدة تضمين (السماح) بدلاً من
قاعدة استبعاد (الحظر). القيمة التلقائية هي
"true".القيمة الوصف "true"(تلقائي)إذا تطابقت مجموعة الفلاتر النسبية لمعرّف الموارد المنتظم (URI)، سيتطابق intent filter "false"إذا تطابقت مجموعة الفلاتر النسبية الخاصة بمعرّف الموارد المنتظم (URI)، لن يتطابق فلتر intent.
- تم إدخال القدرة لأول مرة في:
- مستوى واجهة برمجة التطبيقات 35
- راجِع أيضًا:
-
<intent-filter><data>
<uri-relative-filter-group>
يخضع كل من المحتوى وعيّنات التعليمات البرمجية في هذه الصفحة للتراخيص الموضحّة في ترخيص استخدام المحتوى. إنّ Java وOpenJDK هما علامتان تجاريتان مسجَّلتان لشركة Oracle و/أو الشركات التابعة لها.
تاريخ التعديل الأخير: 2026-04-21 (حسب التوقيت العالمي المتفَّق عليه)
[null,null,["تاريخ التعديل الأخير: 2026-04-21 (حسب التوقيت العالمي المتفَّق عليه)"],[],[]]