- Syntax:
-
<uri-relative-filter-group android:allow=["true" | "false"]> <data ... /> ... </uri-relative-filter-group>
- enthalten in:
-
<intent-filter> - kann Folgendes enthalten:
-
<data> - description:
-
Erstellt präzise
Intent-Abgleichsregeln, die URI-Suchparameter und URI-Fragmente enthalten können. Die Regeln können je nachandroid:allow-Attribut Einschlussregeln (allow) oder Ausschlussregeln (blocking) sein. Die Abgleichsregeln werden durch die Attributepath*,fragment*undquery*der enthaltenen<data>-Elemente angegeben.Abgleich
Damit ein URI übereinstimmt, muss jeder Teil der URI-Filtergruppe mit einem Teil des URI übereinstimmen. Es kann Teile des URI geben, die nicht in der Filtergruppe für relative URI angegeben sind. Beispiel:
<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>
Der Filter entspricht
https://project.example.com/any/path/here?param1=value1¶m2=value2¶m3=value3, da alles, was durch die Filtergruppe für relative URIs angegeben wird, vorhanden ist. Der Filter stimmt auch mithttps://project.example.com/any/path/here?param2=value2¶m1=value1überein, da die Reihenfolge der Abfrageparameter keine Rolle spielt. Der Filter stimmt jedoch nicht mithttps://project.example.com/any/path/here?param1=value1überein, daparam2=value2fehlt.OR und AND
<data>-Tags außerhalb eines<uri-relative-filter-group>werden mit ODER verknüpft, während<data>-Tags innerhalb eines<uri-relative-filter-group>mit UND verknüpft werden.Dazu ein Beispiel:
<intent-filter...> <data android:scheme="https" android:host="project.example.com" /> <data android:pathPrefix="/prefix" /> <data android:pathSuffix="suffix" /> ... </intent-filter>
Der Filter entspricht Pfaden, die mit
/prefixbeginnen ODER mitsuffixenden.Im Gegensatz dazu stimmt das nächste Beispiel mit Pfaden überein, die mit
/prefixbeginnen UND mitsuffixenden:<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>
Daher stimmen mehrere
path-Attribute in derselben<uri-relative-filter-group>mit nichts überein:<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>
Reihenfolge der Erklärungen
Dazu ein Beispiel:
<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>
Der Filter stimmt mit dem Fragment
#fragmentüberein, da eine Übereinstimmung gefunden wird, bevor die Ausschlussregel ausgewertet wird. Fragmente wie#fragment123stimmen jedoch nicht überein.Geschwister-Tags
<uri-relative-filter-group>-Tags funktionieren zusammen mit ihren gleichgeordneten<data>-Tags (d. h.<data>-Tags, die sich außerhalb des<uri-relative-filter-group>, aber innerhalb desselben<intent-filter>befinden).<uri-relative-filter-group>-Tags müssen gleichgeordnete<data>-Tags haben, damit sie richtig funktionieren, da URI-Attribute auf der<intent-filter>-Ebene voneinander abhängig sind:- Wenn für den Intent-Filter keine
schemeangegeben ist, werden alle anderen URI-Attribute ignoriert. - Wenn für den Filter kein
hostangegeben ist, werden das Attributportund allepath*-Attribute ignoriert.
Die
<data>-Untergeordneten Elemente eines<intent-filter>werden vor allen<uri-relative-filter-group>-Tags ausgewertet. Anschließend werden die<uri-relative-filter-group>-Tags der Reihe nach ausgewertet, z. B.:<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>
Der Filter akzeptiert
https://project.example.com/path?query, da er mit<data android:path="/path" />übereinstimmt, das außerhalb der Ausschlussregel<uri-relative-filter-group>liegt.Häufiger Anwendungsfall
Angenommen, Sie haben den URI
https://project.example.com/path, der je nach Vorhandensein oder Wert eines Abfrageparameters mit einemIntentabgeglichen werden soll. Wenn Sie einen Intent-Filter erstellen möchten, derhttps://project.example.com/pathentspricht undhttps://project.example.com/path?queryblockiert, können Sie Folgendes versuchen:<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>
Das funktioniert tatsächlich nicht. Der
https://project.example.com/path?query-URI entspricht dem Pfad/pathund das Tag<uri-relative-filter-group>ermöglicht zusätzliche Teile beim Abgleich.Ändern Sie den Intent-Filter so:
<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>
Dieser Filter funktioniert, weil die Blockierungsregeln, die nicht leere Abfrageparameter verbieten, zuerst ausgewertet werden.
Um den Code zu vereinfachen, können Sie das Verhalten umkehren, sodass Abfrageparameter zulässig sind und URIs ohne Abfrageparameter blockiert werden:
<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-codierte Zeichen
Wenn Sie URIs abgleichen möchten, die URI-codierte Zeichen enthalten, geben Sie die rohen, nicht codierten Zeichen in den Filter ein, z. B.:
<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>
Der Filter entspricht
?param=value!und?param=value%21.Wenn Sie jedoch codierte Zeichen im Filter so schreiben:
<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>
Der Filter stimmt weder mit
?param=value!noch mit?param=value%21überein.Anzahl der Elemente
Sie können beliebig viele
<uri-relative-filter-group>-Elemente in ein<intent-filter>einfügen.Weitere Informationen
Informationen zur Funktionsweise von Intent-Filtern, einschließlich der Regeln für den Abgleich von Intent-Objekten mit Filtern, finden Sie unter Intents and Intent Filters und Intent Filters.
Informationen zu
<uri-relative-filter-group>finden Sie unterUriRelativeFilterGroupundUriRelativeFilter. - Wenn für den Intent-Filter keine
- Attribute:
-
android:allow-
Gibt an, ob diese Gruppe relativer URI-Filter eine Einschlussregel (allow) und keine Ausschlussregel (blocking) ist. Der Standardwert ist
"true".Wert Beschreibung "true"(Standard)Wenn die Filtergruppe für relative URIs übereinstimmt, stimmt der Intent-Filter überein. "false"Wenn die Filtergruppe für relative URIs übereinstimmt, stimmt der Intent-Filter nicht überein.
- Eingeführt in:
- API-Level 35
- Siehe auch:
-
<intent-filter><data>
<uri-relative-filter-group>
Alle Inhalte und Codebeispiele auf dieser Seite unterliegen den Lizenzen wie im Abschnitt Inhaltslizenz beschrieben. Java und OpenJDK sind Marken oder eingetragene Marken von Oracle und/oder seinen Tochtergesellschaften.
Zuletzt aktualisiert: 2026-04-21 (UTC).
[null,null,["Zuletzt aktualisiert: 2026-04-21 (UTC)."],[],[]]