- Składnia:
- Jeśli tag data jest bezpośrednim elementem podrzędnym tagu
<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" />
Jeśli tag data jest bezpośrednim elementem podrzędnym tagu<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" />
- Zawarty w:
-
<intent-filter><uri-relative-filter-group> - Opis:
- Dodaje specyfikację danych do filtra intencji. Specyfikacja to typ danych (za pomocą atrybutu
mimeType), identyfikator URI lub typ danych i identyfikator URI. Identyfikator URI jest określany przez osobne atrybuty dla każdej jego części:<scheme>://<host>:<port>[<path>|<pathPrefix>|<pathPattern>|<pathAdvancedPattern>|<pathSuffix>]Te atrybuty określające format identyfikatora URI są opcjonalne, ale też wzajemnie od siebie zależne:
- Jeśli w filtrze intencji nie określono
scheme, wszystkie inne atrybuty identyfikatora URI są ignorowane. - Jeśli w filtrze nie określono
host, atrybutporti wszystkie atrybuty ścieżki są ignorowane.
Wszystkie elementy
<data>zawarte w tym samym<intent-filter>elemencie tworzą ten sam filtr. Na przykład ta specyfikacja filtra:<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>
jest równoważna tej:
<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>
W tagu
<intent-filter>możesz umieścić dowolną liczbę elementów<data>, aby zapewnić mu wiele opcji danych. Żaden z jego atrybutów nie ma wartości domyślnych.Informacje o tym, jak działają filtry intencji, w tym o regułach dopasowywania obiektów intencji do filtrów, znajdziesz w sekcjach Intencje i filtry intencji oraz Filtry intencji w artykule Omówienie pliku manifestu.
- Jeśli w filtrze intencji nie określono
- Atrybuty:
android:scheme- Część schematu identyfikatora URI. Jest to minimalny niezbędny atrybut do określenia identyfikatora URI. W filtrze musi być ustawiony co najmniej 1 atrybut
scheme. W przeciwnym razie żaden z pozostałych atrybutów identyfikatora URI nie będzie miał znaczenia.Schemat jest określany bez końcowego dwukropka, np.
httpa niehttp:.Jeśli filtr ma ustawiony typ danych (za pomocą
mimeTypeatrybutu) i nie ma schematu, przyjmowane są schematycontent:ifile:schemes are assumed.Uwaga: dopasowywanie schematów w frameworku Androida uwzględnia wielkość liter, w przeciwieństwie do RFC. Dlatego zawsze określaj schematy za pomocą małych liter.
android:host-
Część hosta identyfikatora URI. Ten atrybut nie ma znaczenia, jeśli w filtrze nie określono też atrybutu
scheme. Aby dopasować wiele subdomen, użyj gwiazdki (*), która zastępuje zero lub więcej znaków w hoście. Na przykład host*.google.compasuje dowww.google.com,.google.com, ideveloper.google.com.Gwiazdka musi być pierwszym znakiem atrybutu host. Na przykład host
google.co.*jest nieprawidłowy, ponieważ gwiazdka nie jest pierwszym znakiem.Uwaga: dopasowywanie nazw hostów w frameworku Androida uwzględnia wielkość liter, w przeciwieństwie do formalnego RFC. Dlatego zawsze określaj nazwy hostów za pomocą małych liter.
android:port- Część portu identyfikatora URI. Ten atrybut ma znaczenie tylko wtedy, gdy w filtrze określono też atrybuty
schemeihost. android:pathandroid:pathPrefixandroid:pathSuffixandroid:pathPatternandroid:pathAdvancedPattern- Część ścieżki identyfikatora URI, która musi zaczynać się od znaku
/. Atrybutpathokreśla pełną ścieżkę, która jest dopasowywana do pełnej ścieżki w obiekcieIntent. AtrybutpathPrefixokreśla częściową ścieżkę, która jest dopasowywana tylko do początkowej części ścieżki w obiekcieIntent.Atrybut
pathSuffixjest dokładnie dopasowywany do końcowej części ścieżki w obiekcieIntenti nie musi zaczynać się od znaku/.Atrybut
pathPatternokreśla pełną ścieżkę, która jest dopasowywana do pełnej ścieżki w obiekcieIntent, ale może zawierać te symbole wieloznaczne:-
Kropka (
.) pasuje do dowolnego pojedynczego znaku. Aby dopasować dosłowną kropkę, użyj sekwencji\\.w XML-u. -
Gwiazdka (
*) pasuje do sekwencji od zera do wielu wystąpień znaku bezpośrednio poprzedzającego. Na przykłada*pasuje do „a” i „aa”, ale nie pasuje do pustego ciągu znaków. -
Kropka, po której następuje gwiazdka (
.*), pasuje do dowolnej sekwencji zera lub większej liczby znaków. Na przykład.*pasuje do pustego ciągu znaków, ab.*pasuje do „b”, „bc” i „bcd”.
Ważne kwestie dotyczące
pathPattern:- Brak cofania: narzędzie do dopasowywania wzorców w Androidzie analizuje ciągi znaków w jednym przebiegu do przodu bez cofania. Jeśli symbol wieloznaczny zużyje znaki, które są potrzebne później we wzorcu, dopasowanie się nie powiedzie.
-
.*jest leniwy: symbol wieloznaczny.*jest leniwy. Zużywa znaki, dopóki nie znajdzie pierwszego wystąpienia następnego dosłownego znaku we wzorcu.-
"abc.*xyz"nie będzie pasować do ciągu znaków"abcpxqrxyz". Symbol.*leniwie zatrzymuje się na pierwszym znaku"x"(z ciągu"px..."). Pozostały ciąg znaków"qrxyz"nie pasuje do oczekiwanego ciągu"yz". -
Ostrzeżenie: ponieważ symbol
.*szuka dokładnego dopasowania znaku, aby się zatrzymać, ciąg"a.*.c"nie będzie pasować do ciągu"abbbc". Narzędzie do dopasowywania traktuje drugą.jako dosłowną kropkę i skanuje ciąg znaków w poszukiwaniu znaku".", a gdy dotrze do końca, dopasowanie się nie powiedzie.
-
-
*jest zachłanny: określony znak, po którym następuje gwiazdka (np.a*), jest zachłanny. Zużywa wszystkie kolejne wystąpienia tego znaku bez patrzenia w przód.-
"a*a"nie będzie pasować do ciągów znaków takich jak"aaa". Częśća*zachłannie zużywa wszystkie 3 znaki"a". Wzorzec oczekuje wtedy ostatniego znaku"a", ale ciąg znaków jest już wyczerpany, co powoduje niepowodzenie dopasowania.
-
- Sprawdzone metody:
-
Unikaj wzorców, w których znak bezpośrednio następujący po symbolu
*jest taki sam jak znak poprzedzający (np.a*a). -
Unikaj umieszczania symboli wieloznacznych bezpośrednio po symbolu
.*(np..*.lub.*.*). -
Jeśli chcesz dopasować prefiks, bezpieczniej i wydajniej jest użyć
android:pathPrefixzamiast kończyćpathPatternsymbolem.*.
-
Unikaj wzorców, w których znak bezpośrednio następujący po symbolu
Atrybut
pathAdvancedPatternokreśla pełną ścieżkę, która jest dopasowywana do pełnej ścieżki obiektuIntenti obsługuje te wzorce podobne do wyrażeń regularnych:-
Kropka (
.) pasuje do dowolnego znaku. -
Zestaw (
[...]) pasuje do zakresów znaków. Na przykład[0-5]pasuje do pojedynczej cyfry od 0 do 5 , ale nie do cyfry od 6 do 9.[a-zA-Z]pasuje do dowolnej litery, niezależnie od wielkości. Zestawy obsługują też modyfikator „not” (^). -
Modyfikator gwiazdki (
*) pasuje do poprzedzającego wzorca zero lub więcej razy. -
Modyfikator plusa (
+) pasuje do poprzedzającego wzorca co najmniej raz. -
Modyfikator zakresu (
{...}) określa, ile razy wzorzec może pasować.
pathAdvancedPatternto implementacja oceny, w której dopasowywanie odbywa się do wzorca w czasie rzeczywistym bez obsługi cofania.Ponieważ znak
\jest używany jako znak modyfikacji, gdy ciąg znaków jest odczytywany z XML-a, przed jego przeanalizowaniem jako wzorca musisz użyć podwójnego znaku modyfikacji. Na przykład dosłowny znak*jest zapisywany jako\\*, a dosłowny znak\jest zapisywany jako\\\\. Jest to podobne do tego, co piszesz podczas tworzenia ciągu znaków w kodzie Java.Więcej informacji o tych 5 typach wzorców znajdziesz w opisach
PATTERN_LITERAL,PATTERN_PREFIX,PATTERN_SIMPLE_GLOB,PATTERN_SUFFIXiPATTERN_ADVANCED_GLOBw klasiePatternMatcher.Te atrybuty mają znaczenie tylko wtedy, gdy w filtrze określono też atrybuty
schemeihost.Atrybuty
pathSuffixipathAdvancedPatternzostały wprowadzone w poziomie API 31. -
Kropka (
android:fragmentandroid:fragmentPrefixandroid:fragmentSuffixandroid:fragmentPatternandroid:fragmentAdvancedPattern-
Narzędzie do dopasowywania fragmentu identyfikatora URI. Nie uwzględniaj prefiksu
#. Znaczenie i wzorce dozwolone w każdym atrybucie znajdziesz powyżej.Aby dopasować znaki, które są zwykle kodowane w identyfikatorze URI, w wartości atrybutu uwzględnij postać niezakodowaną. Na przykład,
<data android:fragment="test!" />pasuje do#test!i#test%21.Wprowadzono w poziomie API 35.
android:queryandroid:queryPrefixandroid:querySuffixandroid:queryPatternandroid:queryAdvancedPattern-
Narzędzie do dopasowywania parametru zapytania identyfikatora URI (i opcjonalnie wartości). Na przykład możesz dopasować identyfikatory URI kończące się na
?param=valueza pomocą<data android:query="param=value" />. Nie uwzględniaj prefiksu?. Znaczenie i wzorce dozwolone w każdym atrybucie znajdziesz powyżej.Aby dopasować znaki, które są zwykle kodowane w identyfikatorze URI, w wartości atrybutu uwzględnij postać niezakodowaną. Na przykład,
<data android:query="test!" />pasuje do?test!i?test%21.Wprowadzono w poziomie API 35.
android:mimeType- Typ MIME, np.
image/jpeglubaudio/mpeg4-generic. Podtyp może być symbolem wieloznacznym gwiazdki (*), co oznacza, że pasuje do dowolnego podtypu.Często filtr intencji deklaruje element
<data>, który zawiera tylko atrybutandroid:mimeType.Uwaga: dopasowywanie typów MIME w frameworku Androida uwzględnia wielkość liter, w przeciwieństwie do formalnych typów MIME RFC. Dlatego zawsze określaj typy MIME za pomocą małych liter.
- Wprowadzono w:
- poziomie API 1
- Zobacz też:
<action><category>
<dane>
Treść strony i umieszczone na niej fragmenty kodu podlegają licencjom opisanym w Licencji na treści. Java i OpenJDK są znakami towarowymi lub zastrzeżonymi znakami towarowymi należącymi do firmy Oracle lub jej podmiotów stowarzyszonych.
Ostatnia aktualizacja: 2026-04-21 UTC.
[[["Łatwo zrozumieć","easyToUnderstand","thumb-up"],["Rozwiązało to mój problem","solvedMyProblem","thumb-up"],["Inne","otherUp","thumb-up"]],[["Brak potrzebnych mi informacji","missingTheInformationINeed","thumb-down"],["Zbyt skomplikowane / zbyt wiele czynności do wykonania","tooComplicatedTooManySteps","thumb-down"],["Nieaktualne treści","outOfDate","thumb-down"],["Problem z tłumaczeniem","translationIssue","thumb-down"],["Problem z przykładami/kodem","samplesCodeIssue","thumb-down"],["Inne","otherDown","thumb-down"]],["Ostatnia aktualizacja: 2026-04-21 UTC."],[],[]]