- תחביר:
-
<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, כל חלק בקבוצת המסננים היחסית של ה-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במסנן הכוונה, המערכת מתעלמת מכל שאר מאפייני ה-URI. - אם לא מציינים את הערך של
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בהתאם לנוכחות או לערך של פרמטר שאילתה. כדי ליצור מסנן כוונה שיתאים ל-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>
המסנן הזה פועל כי כללי החסימה שאוסרים על פרמטרים של שאילתות ריקים נבדקים קודם.
כדי לפשט את הקוד, משנים את ההתנהגות כך שתאפשר להשתמש בפרמטרים של שאילתות ותחסום URIs ללא פרמטרים של שאילתות:
<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.מספר הרכיבים
אפשר להוסיף כמה שרוצים רכיבי
<uri-relative-filter-group>לתוך רכיב<intent-filter>.משאבים נוספים
מידע נוסף על אופן הפעולה של מסנני הכוונה, כולל הכללים שלפיהם מתבצע ההתאמה של אובייקטי הכוונה למסננים, זמין במאמרים כוונות ומסנני כוונה ומסנני כוונה.
מידע על
<uri-relative-filter-group>זמין במאמריםUriRelativeFilterGroupו-UriRelativeFilter. - אם לא מציינים את הערך
- מאפיינים:
- הופיע לראשונה:
- רמת API 35
- מידע נוסף:
-
<intent-filter><data>
<uri-relative-filter-group>
דוגמאות התוכן והקוד שבדף הזה כפופות לרישיונות המפורטים בקטע רישיון לתוכן. Java ו-OpenJDK הם סימנים מסחריים או סימנים מסחריים רשומים של חברת Oracle ו/או של השותפים העצמאיים שלה.
עדכון אחרון: 2025-07-27 (שעון UTC).
[[["התוכן קל להבנה","easyToUnderstand","thumb-up"],["התוכן עזר לי לפתור בעיה","solvedMyProblem","thumb-up"],["סיבה אחרת","otherUp","thumb-up"]],[["חסרים לי מידע או פרטים","missingTheInformationINeed","thumb-down"],["התוכן מורכב מדי או עם יותר מדי שלבים","tooComplicatedTooManySteps","thumb-down"],["התוכן לא עדכני","outOfDate","thumb-down"],["בעיה בתרגום","translationIssue","thumb-down"],["בעיה בדוגמאות/בקוד","samplesCodeIssue","thumb-down"],["סיבה אחרת","otherDown","thumb-down"]],["עדכון אחרון: 2025-07-27 (שעון UTC)."],[],[]]