<dane>

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, atrybut port i 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.

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. http a nie http:.

Jeśli filtr ma ustawiony typ danych (za pomocą mimeType atrybutu) i nie ma schematu, przyjmowane są schematy content: i file: 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.com pasuje do www.google.com, .google.com, i developer.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 scheme i host.
android:path
android:pathPrefix
android:pathSuffix
android:pathPattern
android:pathAdvancedPattern
Część ścieżki identyfikatora URI, która musi zaczynać się od znaku /. Atrybut path określa pełną ścieżkę, która jest dopasowywana do pełnej ścieżki w obiekcie Intent. Atrybut pathPrefix określa częściową ścieżkę, która jest dopasowywana tylko do początkowej części ścieżki w obiekcie Intent.

Atrybut pathSuffix jest dokładnie dopasowywany do końcowej części ścieżki w obiekcie Intent i nie musi zaczynać się od znaku /.

Atrybut pathPattern określa pełną ścieżkę, która jest dopasowywana do pełnej ścieżki w obiekcie Intent, 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ład a* 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, a b.* 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:pathPrefix zamiast kończyć pathPattern symbolem .*.

Atrybut pathAdvancedPattern określa pełną ścieżkę, która jest dopasowywana do pełnej ścieżki obiektu Intent i 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ć.
Narzędzie do dopasowywania pathAdvancedPattern to 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_SUFFIX i PATTERN_ADVANCED_GLOB w klasie PatternMatcher.

Te atrybuty mają znaczenie tylko wtedy, gdy w filtrze określono też atrybuty scheme i host.

Atrybuty pathSuffix i pathAdvancedPattern zostały wprowadzone w poziomie API 31.

android:fragment
android:fragmentPrefix
android:fragmentSuffix
android:fragmentPattern
android: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:query
android:queryPrefix
android:querySuffix
android:queryPattern
android: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=value za 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/jpeg lub audio/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 atrybut android: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>