- תחביר:
-
<uri-relative-filter-group android:allow=["true" | "false"]> <data ... /> ... </uri-relative-filter-group>
- מוכל ב:
-
<intent-filter> - יכול להכיל:
-
<data> - תיאור:
-
יוצר כללי התאמה מדויקים של
Intentשיכולים לכלול פרמטרים של שאילתות URI ופרגמנטים של URI. הכללים יכולים להיות כללי הכללה (allow) או כללי אי-הכללה (blocking), בהתאם למאפיין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¶m2=value2¶m3=value3כי כל מה שצוין על ידי קבוצת המסננים של ה-URI היחסי קיים. המסנן מתאים גם ל-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>
כתוצאה מכך, כמה מאפיינים
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>כדי לפעול בצורה תקינה, כי מאפייני ה-URI תלויים זה בזה ברמה של<intent-filter>:- אם לא מציינים את
schemeבמסנן Intent, המערכת מתעלמת מכל שאר מאפייני ה-URI. - אם לא מציינים את
hostבמסנן, המערכת מתעלמת מהמאפייןportומכל המאפייניםpath*.
התגים
<data>children של תג<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 שתואם ל-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 באופן הבא:
<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!and?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>.משאבים נוספים
מידע על אופן הפעולה של מסנני Intent, כולל הכללים להתאמת אובייקטים של Intent למסננים, זמין במאמרים Intents and Intent Filters ו-Intent Filters.
מידע על
<uri-relative-filter-group>, אפשר למצוא במאמריםUriRelativeFilterGroupוUriRelativeFilter. - אם לא מציינים את
- מאפיינים:
- הושק ב:
- רמת API 35
- ראו גם:
-
<intent-filter><data>
<uri-relative-filter-group>
דוגמאות התוכן והקוד שבדף הזה כפופות לרישיונות המפורטים בקטע רישיון לתוכן. Java ו-OpenJDK הם סימנים מסחריים או סימנים מסחריים רשומים של חברת Oracle ו/או של השותפים העצמאיים שלה.
עדכון אחרון: 2026-04-21 (שעון UTC).
[null,null,["עדכון אחרון: 2026-04-21 (שעון UTC)."],[],[]]