<Daten>

Syntax:
Wenn das Datentag das unmittelbare untergeordnete Element eines <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" />

Wenn das Datentag das unmittelbare untergeordnete Element von <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" />
Enthalten in:
<intent-filter>
<uri-relative-filter-group>
Beschreibung:
Fügt einem Intent-Filter eine Datenspezifikation hinzu. Die Spezifikation ist ein Datentyp, ein URI oder beides, wobei das Attribut mimeType verwendet wird. Ein URI wird durch separate Attribute für die einzelnen Teile angegeben:

<scheme>://<host>:<port>[<path>|<pathPrefix>|<pathPattern>|<pathAdvancedPattern>|<pathSuffix>]

Diese Attribute, die das URI-Format angeben, sind optional, aber auch voneinander abhängig:

  • Wenn für den Intent-Filter kein scheme angegeben ist, werden alle anderen URI-Attribute ignoriert.
  • Wenn für den Filter kein host angegeben ist, werden das Attribut port und alle Pfadattribute ignoriert.

Alle <data>-Elemente, die im selben <intent-filter>-Element enthalten sind, tragen zum selben Filter bei. Die folgende Filterspezifikation:

<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>

entspricht dieser:

<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>

Sie können beliebig viele <data>-Elemente in ein <intent-filter> einfügen, um mehrere Daten optionen zu definieren. Keines der Attribute hat Standardwerte.

Informationen zur Funktionsweise von Intent-Filtern, einschließlich der Regeln für den Abgleich von Intent-Objekten mit Filtern, finden Sie unter Intents und Intent-Filter und im Abschnitt Intent-Filter in der Übersicht über die Manifestdatei.

Attribute:
android:scheme
Der Schemateil eines URI. Dies ist das minimale erforderliche Attribut zum Angeben eines URI. Für den Filter muss mindestens ein scheme-Attribut festgelegt sein, andernfalls sind die anderen URI-Attribute nicht sinnvoll.

Ein Schema wird ohne den nachgestellten Doppelpunkt angegeben, z. B. http anstelle von http:.

Wenn für den Filter ein Datentyp festgelegt ist (mit dem mimeType Attribut), aber kein Schema, werden die Schemas content: und file: angenommen.

Hinweis: Beim Abgleich von Schemas im Android-Framework wird die Groß-/Kleinschreibung berücksichtigt, anders als im RFC. Geben Sie Schemas daher immer in Kleinbuchstaben an.

android:host
Der Hostteil einer URI-Autorität. Dieses Attribut ist nur sinnvoll, wenn für den Filter auch ein scheme-Attribut angegeben ist. Wenn mehrere Subdomains abgeglichen werden sollen, verwenden Sie ein Sternchen (*), um null oder mehr Zeichen im Host abzugleichen. Der Host *.google.com stimmt beispielsweise mit www.google.com, .google.com und developer.google.com überein.

Das Sternchen muss das erste Zeichen des Attributs `host` sein. Der Host google.co.* ist beispielsweise ungültig, da das Sternchen kein Platzhalter für das erste Zeichen ist.

Hinweis: Beim Abgleich von Hostnamen im Android-Framework wird die Groß-/Kleinschreibung berücksichtigt, anders als im formalen RFC. Geben Sie Hostnamen daher immer in Kleinbuchstaben an.

android:port
Der Portteil einer URI-Autorität. Dieses Attribut ist nur sinnvoll, wenn für den Filter auch die Attribute scheme und host angegeben sind.
android:path
android:pathPrefix
android:pathSuffix
android:pathPattern
android:pathAdvancedPattern
Der Pfadteil eines URI, der mit einem / beginnen muss. Das Attribut path gibt einen vollständigen Pfad an, der mit dem vollständigen Pfad in einem Intent-Objekt abgeglichen wird. Das Attribut pathPrefix gibt einen Teilpfad an, der nur mit dem Anfangsteil des Pfads im Intent-Objekt abgeglichen wird.

Das pathSuffix Attribut wird genau mit dem Endteil des Pfads im Intent Objekt abgeglichen und muss nicht mit dem / Zeichen beginnen.

Das Attribut pathPattern gibt einen vollständigen Pfad an, der mit dem vollständigen Pfad im Intent Objekt abgeglichen wird. Es kann jedoch die folgenden Platzhalter enthalten:

  • Ein Punkt (.) stimmt mit einem beliebigen einzelnen Zeichen überein. Wenn Sie einen wörtlichen Punkt abgleichen möchten, müssen Sie ihn in Ihrem XML als \\. maskieren.
  • Ein Sternchen (*) stimmt mit einer Sequenz von null bis vielen Vorkommen des unmittelbar vorangehenden Zeichens überein. Beispielsweise stimmt a* mit "a" und "aa" überein, aber stimmt nicht mit einem leeren String überein.
  • Ein Punkt gefolgt von einem Sternchen (.*) stimmt mit einer Sequenz von null oder mehr Zeichen überein. Beispielsweise stimmt .* mit einem leeren String überein und b.* stimmt mit „b“, „bc“ und „bcd“ überein.

Wichtige Hinweise zu pathPattern:

  • Kein Backtracking: Der Musterabgleich von Android wertet Strings in einem einzigen Durchlauf ohne Backtracking aus. Wenn ein Platzhalter Zeichen verbraucht, die später in dem Muster benötigt werden, schlägt der Abgleich fehl.
  • .* ist nicht gierig:Der Platzhalter .* ist nicht gierig. Er verbraucht Zeichen, bis er das erste Vorkommen des nächsten wörtlichen Zeichens im Muster findet.
    • "abc.*xyz" stimmt nicht mit "abcpxqrxyz" überein. Der Platzhalter .* stoppt nicht gierig beim ersten "x" (von "px..."). Der verbleibende String "qrxyz" stimmt nicht mit dem erwarteten "yz" überein.
    • Warnung: Da .* nach einer genauen Zeichenübereinstimmung sucht, um zu stoppen, stimmt "a.*.c" **nicht** mit "abbbc" überein. Der Abgleich behandelt den zweiten . als wörtlichen Punkt und durchsucht den String nach einem ".". Wenn er das Ende erreicht, schlägt der Abgleich fehl.
  • * ist gierig: Ein bestimmtes Zeichen gefolgt von einem Sternchen (z. B. a*) ist gierig. Es verbraucht alle aufeinanderfolgenden Vorkommen dieses Zeichens, ohne vorauszuschauen.
    • "a*a" stimmt nicht mit Strings wie "aaa" überein. Der Teil a* verbraucht gierig alle drei "a"s. Das Muster erwartet dann das letzte "a", aber der String ist bereits erschöpft, sodass der Abgleich fehlschlägt.
  • Best Practices:
    • Vermeiden Sie Muster, bei denen das Zeichen unmittelbar nach einem * mit dem Zeichen davor identisch ist (z.B. a*a).
    • Platzieren Sie keine Platzhalter unmittelbar nach .* (z.B. .*. oder .*.*).
    • Wenn Sie ein Präfix abgleichen möchten, ist es sicherer und effizienter, android:pathPrefix zu verwenden, anstatt ein pathPattern mit .* zu beenden.

Das Attribut pathAdvancedPattern gibt einen vollständigen Pfad an, der mit dem vollständigen Pfad des Intent-Objekts abgeglichen wird und die folgenden regulären Ausdrücke unterstützt:

  • Ein Punkt (.) stimmt mit einem beliebigen Zeichen überein.
  • Ein Satz ([...]) stimmt mit Zeichenbereichen überein. Beispielsweise stimmt [0-5] mit einer einzelnen Ziffer von 0 bis 5 überein , aber nicht mit 6 bis 9. [a-zA-Z] stimmt mit einem beliebigen Buchstaben überein, unabhängig von der Groß-/Kleinschreibung. Sätze unterstützen auch den Modifikator „nicht“ ^.
  • Der Modifikator Sternchen (*) stimmt mit dem vorangehenden Muster null oder mehr Mal überein.
  • Der Modifikator Pluszeichen (+) stimmt mit dem vorangehenden Muster ein oder mehr Mal überein.
  • Der Modifikator Bereich ({...}) gibt an, wie oft ein Muster übereinstimmen kann.
Der pathAdvancedPattern Abgleich ist eine Auswertungsimplementierung, bei der der Abgleich in Echtzeit mit dem Muster erfolgt und kein Backtracking unterstützt wird.

Da \ als Escapezeichen verwendet wird, wenn der String aus XML gelesen wird, müssen Sie ihn doppelt maskieren, bevor er als Muster geparst wird. Ein wörtliches * wird beispielsweise als \\* und ein wörtliches \ als \\\\ geschrieben. Das entspricht dem, was Sie beim Erstellen des Strings im Java-Code schreiben.

Weitere Informationen zu diesen fünf Mustertypen finden Sie in den Beschreibungen von PATTERN_LITERAL, PATTERN_PREFIX, PATTERN_SIMPLE_GLOB, PATTERN_SUFFIX und PATTERN_ADVANCED_GLOB in der Klasse PatternMatcher.

Diese Attribute sind nur sinnvoll, wenn für den Filter auch die Attribute scheme und host angegeben sind.

pathSuffix und pathAdvancedPattern wurden in API-Level 31 eingeführt.

android:fragment
android:fragmentPrefix
android:fragmentSuffix
android:fragmentPattern
android:fragmentAdvancedPattern

Ein Abgleich für ein URI-Fragment. Fügen Sie das Präfix # nicht ein. Die Bedeutung von und die in den einzelnen Attributen zulässigen Muster finden Sie oben.

Wenn Sie Zeichen abgleichen möchten, die normalerweise URI-codiert sind, fügen Sie die Rohform (nicht codiert) in den Attributwert ein. Beispielsweise stimmt <data android:fragment="test!" /> mit #test! und #test%21 überein.

Eingeführt in API-Level 35.

android:query
android:queryPrefix
android:querySuffix
android:queryPattern
android:queryAdvancedPattern

Ein Abgleich für einen URI-Abfrageparameter (und optional einen Wert). Sie können beispielsweise URIs die mit ?param=value enden, mit <data android:query="param=value" /> abgleichen. Fügen Sie das Präfix ? nicht ein. Die Bedeutung von und die in den einzelnen Attributen zulässigen Muster finden Sie oben.

Wenn Sie Zeichen abgleichen möchten, die normalerweise URI-codiert sind, fügen Sie die Rohform (nicht codiert) in den Attributwert ein. Beispielsweise stimmt <data android:query="test!" /> mit ?test! und ?test%21 überein.

Eingeführt in API-Level 35.

android:mimeType
Ein MIME-Medientyp wie image/jpeg oder audio/mpeg4-generic. Der Untertyp kann das Sternchen (*) sein, um anzugeben, dass ein beliebiger Untertyp übereinstimmt.

Häufig deklariert ein Intent-Filter ein <data> Element, das nur das android:mimeType Attribut enthält.

Hinweis: Beim Abgleich von MIME-Typen im Android-Framework wird die Groß-/Kleinschreibung berücksichtigt, anders als bei formalen RFC-MIME-Typen. Geben Sie MIME-Typen daher immer in Kleinbuchstaben an.

Eingeführt in:
API-Level 1
Siehe auch:
<action>
<category>