- תחביר:
- אם תג הנתונים הוא צאצא ישיר של התג
<intent-filter>:
<data android:scheme="string" android:host="string" android:port="string" android:path="string" android:pathPattern="string" android:pathPrefix="string" android:pathSuffix="string" android:pathAdvancedPattern="string" android:mimeType="string" />
אם תג הנתונים הוא הצאצא המיידי של<uri-relative-filter-group>:
<data android:path="string" android:pathPattern="string" android:pathPrefix="string" android:pathSuffix="string" android:pathAdvancedPattern="string" android:fragment="string" android:fragmentPattern="string" android:fragmentPrefix="string" android:fragmentSuffix="string" android:fragmentAdvancedPattern="string" android:query="string" android:queryPattern="string" android:queryPrefix="string" android:querySuffix="string" android:queryAdvancedPattern="string" />
- מוכל ב:
-
<intent-filter><uri-relative-filter-group> - תיאור:
- הוספת מפרט נתונים למסנן Intent. המפרט הוא סוג נתונים, באמצעות מאפיין
mimeType, URI או שניהם. מציינים URI באמצעות מאפיינים נפרדים לכל אחד מהחלקים שלו:<scheme>://<host>:<port>[<path>|<pathPrefix>|<pathPattern>|<pathAdvancedPattern>|<pathSuffix>]המאפיינים האלה שמציינים את פורמט ה-URI הם אופציונליים, אבל הם גם תלויים זה בזה:
- אם לא מציינים
schemeבמסנן Intent, המערכת מתעלמת מכל שאר מאפייני ה-URI. - אם לא מציינים
hostבמסנן, המערכת מתעלמת מהמאפייןportומכל מאפייני הנתיב.
כל רכיבי
<data>שנכללים באותו רכיב<intent-filter>תורמים לאותו מסנן. לדוגמה, הגדרת המסנן הבאה:<intent-filter . . . > <data android:scheme="something" android:host="project1.example.com" /> <data android:scheme="something-else" android:host="project2.example.com" android:path="/page1" /> ... </intent-filter>
שווה לזה:
<intent-filter . . . > <data android:scheme="something" /> <data android:scheme="something-else" /> <data android:host="project1.example.com" /> <data android:host="project2.example.com" /> <data android:path="/page1" /> ... </intent-filter>
אפשר להציב כל מספר של רכיבי
<data>בתוך רכיב<intent-filter>כדי לספק לו כמה אפשרויות נתונים. לאף אחד מהמאפיינים שלו אין ערכי ברירת מחדל.מידע על אופן הפעולה של מסנני כוונות, כולל הכללים להתאמת אובייקטים של כוונות למסננים, זמין במאמרים Intents and Intent Filters ובקטע Intent filters בסקירה הכללית של קובץ המניפסט.
- אם לא מציינים
- מאפיינים:
android:scheme- החלק של הסכימה ב-URI. זהו מאפיין חיוני מינימלי לציון URI. צריך להגדיר לפחות מאפיין
schemeאחד למסנן, אחרת לא תהיה משמעות למאפיינים האחרים של ה-URI.הסכימה מצוינת ללא הנקודתיים בסוף, למשל
httpבמקוםhttp:.אם במסנן מוגדר סוג נתונים (באמצעות המאפיין
mimeType), אבל לא מוגדרת סכימה, המערכת מניחה את הסכימותcontent:ו-file:.הערה: התאמת הסכימה ב-Android Framework היא תלוית-רישיות, בניגוד ל-RFC. לכן, תמיד צריך לציין סכימות באותיות קטנות.
android:host-
חלק המארח של רשות URI. למאפיין הזה אין משמעות אלא אם מציינים גם את המאפיין
schemeבמסנן. כדי להתאים לכמה תת-דומיינים, משתמשים בכוכבית (*) כדי להתאים לאפס תווים או יותר במארח. לדוגמה, המארח*.google.comתואם ל-www.google.com, ל-.google.comול-developer.google.com.הכוכבית צריכה להיות התו הראשון במאפיין המארח. לדוגמה, המארח
google.co.*לא תקין כי הכוכבית (תו כללי לחיפוש) לא מופיעה כתו הראשון.הערה: התאמה של שם המארח ב-Android framework היא תלוית-רישיות, בניגוד ל-RFC הרשמי. לכן, תמיד צריך לציין שמות של מארחים באותיות קטנות.
android:port- החלק של היציאה בסמכות של URI. למאפיין הזה יש משמעות רק אם מציינים גם את המאפיינים
schemeו-hostעבור המסנן. android:pathandroid:pathPrefixandroid:pathSuffixandroid:pathPatternandroid:pathAdvancedPattern- החלק של הנתיב ב-URI, שחייב להתחיל ב-
/. במאפייןpathמציינים נתיב מלא שמושוואה לנתיב המלא באובייקטIntent. המאפייןpathPrefixמציין נתיב חלקי שתואם רק לחלק הראשוני של הנתיב באובייקטIntent.המאפיין
pathSuffixמותאם בדיוק לחלק האחרון של הנתיב באובייקטIntent, והמאפיין הזה לא צריך להתחיל בתו/.המאפיין
pathPatternמציין נתיב מלא שתואם לנתיב המלא באובייקטIntent, אבל הוא יכול להכיל את התווים הכלליים הבאים:-
נקודה (
.) מתאימה לכל תו בודד. כדי להתאים נקודה מילולית, צריך להוסיף לפני הנקודה את התו\\.ב-XML. -
כוכבית (
*) תואמת לרצף של אפס עד הרבה מופעים של התו שמופיע מיד לפניה. לדוגמה,a*תואם ל-a ול-aa, אבל לא למחרוזת ריקה. -
נקודה שאחריה כוכבית (
.*) מתאימה לכל רצף של אפס תווים או יותר. לדוגמה,.*תואם למחרוזת ריקה, ו-b.*תואם ל-'b', 'bc' ו-'bcd'.
שיקולים חשובים לגבי
pathPattern:- אין חזרה אחורה: התאמת התבניות ב-Android מעריכה מחרוזות במעבר יחיד קדימה ללא חזרה אחורה. אם תו כללי לחיפוש צורך תווים שנדרשים בהמשך הדפוס, ההתאמה תיכשל.
-
.*הוא Lazy: התו הכללי.*הוא Lazy. היא צורכת תווים עד שהיא מוצאת את המופע הראשון של התו הליטרלי הבא בתבנית.-
התרומה בסכום השווה ל-
"abc.*xyz"לא תתאים ל-"abcpxqrxyz". הפונקציה.*מפסיקה באופן עצלני בתו הראשון"x"(מתוך"px..."). המחרוזת שנותרה"qrxyz"לא תואמת לערך הצפוי"yz". -
אזהרה: מכיוון שהפונקציה
.*מחפשת התאמה מדויקת של התו לערך stop, הפונקציה"a.*.c"לא תתאים ל-"abbbc". ההתאמה מתייחסת לנקודה השנייה.כאל נקודה מילולית, וסורקת את המחרוזת בחיפוש אחר".". היא נכשלת כשהיא מגיעה לסוף.
-
התרומה בסכום השווה ל-
-
*הוא חמדן: תו ספציפי שאחריו מופיעה כוכבית (כמוa*) הוא חמדן. היא צורכת את כל המופעים הרצופים של התו הזה בלי להסתכל קדימה.-
המחרוזת
"a*a"לא תתאים למחרוזות כמו"aaa". החלקa*צורך באופן חמדני את כל שלושת"a". התבנית מצפה ל-"a"הסופי, אבל המחרוזת כבר ריקה, ולכן ההתאמה נכשלת.
-
המחרוזת
- שיטות מומלצות:
-
כדאי להימנע מדפוסים שבהם התו שמופיע מיד אחרי
*זהה לתו שמופיע לפניו (למשל,a*a). -
לא מומלץ להשתמש בתווים כלליים מיד אחרי
.*(לדוגמה,.*.או.*.*). -
אם אתם מתכוונים להתאים קידומת, עדיף להשתמש ב-
android:pathPrefixבמקום לסיים אתpathPatternב-.*.
-
כדאי להימנע מדפוסים שבהם התו שמופיע מיד אחרי
במאפיין
pathAdvancedPatternמציינים נתיב מלא, שמושוואה לנתיב המלא של אובייקטIntent. המאפיין תומך בדפוסי ביטוי רגולרי (regex) הבאים:-
נקודה (
.) תואמת לכל תו. -
קבוצה (
[...]) מתאימה לטווחים של תווים. לדוגמה,[0-5]תואם לספרה בודדת מ-0 עד 5, אבל לא מ-6 עד 9.[a-zA-Z]תואם לכל אות, ללא קשר לאותיות רישיות או קטנות. בנוסף, אפשר להשתמש במגדיר 'לא'^בערכות. -
המשנה (modifier) כוכבית (
*) מתאים לדפוס הקודם אפס פעמים או יותר. -
המגביל פלוס (
+) תואם לדפוס הקודם פעם אחת או יותר. -
המשנה (
{...}) של הטווח מציין את מספר הפעמים שתבנית יכולה להתאים.
pathAdvancedPatternהיא הטמעה של הערכה שבה ההתאמה מתבצעת לתבנית בזמן אמת ללא תמיכה בנסיגה.התו
\משמש כתו בריחה כשקוראים את המחרוזת מ-XML, ולכן צריך להשתמש בבריחה כפולה לפני שמנתחים אותה כתבנית. לדוגמה, מחרוזת ליטרלית*נכתבת כ-\\*, ומחרוזת ליטרלית\נכתבת כ-\\\\. זה דומה למה שכותבים כשיוצרים את המחרוזת בקוד Java.מידע נוסף על חמשת סוגי התבניות האלה מופיע בתיאורים של
PATTERN_LITERAL,PATTERN_PREFIX,PATTERN_SIMPLE_GLOB,PATTERN_SUFFIXו-PATTERN_ADVANCED_GLOBבמחלקהPatternMatcher.המאפיינים האלה רלוונטיים רק אם מציינים גם את המאפיינים
schemeו-hostשל המסנן.השיטות
pathSuffixו-pathAdvancedPatternהושקו ברמת API 31. -
נקודה (
android:fragmentandroid:fragmentPrefixandroid:fragmentSuffixandroid:fragmentPatternandroid:fragmentAdvancedPattern-
תבנית התאמה לקטע URI. לא כוללים את הקידומת
#. למעלה מוסבר מה המשמעות של כל מאפיין ומהם הדפוסים שמותרים בו.כדי להתאים תווים שבדרך כלל מקודדים ב-URI, צריך לכלול את הטופס הגולמי (לא מקודד) בערך המאפיין. לדוגמה,
<data android:fragment="test!" />מתאים ל-#test!ול-#test%21.התכונה הזו הושקה ברמת API 35.
android:queryandroid:queryPrefixandroid:querySuffixandroid:queryPatternandroid:queryAdvancedPattern-
תנאי התאמה לפרמטר של שאילתת URI (ואופציונלית, ערך). לדוגמה, אפשר להתאים URI שמסתיים ב-
?param=valueל-<data android:query="param=value" />. לא כוללים את הקידומת?. למעלה מוסבר מה המשמעות של כל מאפיין ומהם הדפוסים שמותרים בו.כדי להתאים תווים שבדרך כלל מקודדים ב-URI, צריך לכלול את הטופס הגולמי (לא מקודד) בערך המאפיין. לדוגמה,
<data android:query="test!" />מתאים ל-?test!ול-?test%21.התכונה הזו הושקה ברמת API 35.
android:mimeType- סוג מדיה MIME, כמו
image/jpegאוaudio/mpeg4-generic. תת-הסוג יכול להיות תו כללי לחיפוש (*) כדי לציין שכל תת-סוג מתאים.בדרך כלל מסנן Intent מכריז על אלמנט
<data>שכולל רק את המאפייןandroid:mimeType.הערה: ההתאמה של סוג MIME ב-Android framework היא תלוית-אותיות רישיות (case-sensitive), בניגוד לסוגי MIME רשמיים של RFC. לכן, תמיד צריך לציין סוגי MIME באותיות קטנות.
- הושק ב:
- רמת API 1
- ראו גם:
<action><category>
<data>
דוגמאות התוכן והקוד שבדף הזה כפופות לרישיונות המפורטים בקטע רישיון לתוכן. Java ו-OpenJDK הם סימנים מסחריים או סימנים מסחריים רשומים של חברת Oracle ו/או של השותפים העצמאיים שלה.
עדכון אחרון: 2026-04-21 (שעון 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"]],["עדכון אחרון: 2026-04-21 (שעון UTC)."],[],[]]