- syntax:
-
<uri-relative-filter-group android:allow=["true" | "false"]> <data ... /> ... </uri-relative-filter-group>
- contenuti in:
-
<intent-filter> - può contenere:
-
<data> - description:
-
Crea regole di corrispondenza
Intentprecise che possono includere parametri di query e frammenti URI. Le regole possono essere di inclusione (allow) o di esclusione (blocking), a seconda dell'attributoandroid:allow. Le regole di corrispondenza sono specificate dagli attributipath*,fragment*equery*degli elementi<data>contenuti.Corrispondenza
Per trovare una corrispondenza con un URI, ogni parte del gruppo di filtri relativi all'URI deve corrispondere a una parte dell'URI. Possono essere presenti parti dell'URI non specificate nel gruppo di filtri relativo all'URI. Ad esempio:
<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>
Il filtro corrisponde
https://project.example.com/any/path/here?param1=value1¶m2=value2¶m3=value3perché è presente tutto ciò che è specificato dal gruppo di filtri relativo all'URI. Il filtro corrisponde anche ahttps://project.example.com/any/path/here?param2=value2¶m1=value1perché l'ordine dei parametri di query non è importante. Tuttavia, il filtro non corrispondehttps://project.example.com/any/path/here?param1=value1, a cui mancaparam2=value2.OR e AND
I tag
<data>all'esterno di un<uri-relative-filter-group>sono OR, mentre i tag<data>all'interno di un<uri-relative-filter-group>sono AND.Considera l'esempio seguente:
<intent-filter...> <data android:scheme="https" android:host="project.example.com" /> <data android:pathPrefix="/prefix" /> <data android:pathSuffix="suffix" /> ... </intent-filter>
Il filtro corrisponde ai percorsi che iniziano con
/prefixOPPURE terminano consuffix.Al contrario, l'esempio seguente corrisponde ai percorsi che iniziano con
/prefixe terminano consuffix:<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>
Di conseguenza, più attributi
pathnello stesso<uri-relative-filter-group>non corrispondono a nulla:<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>
Ordine di dichiarazione
Considera l'esempio seguente:
<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>
Il filtro corrisponde al frammento
#fragmentperché viene trovata una corrispondenza prima della valutazione della regola di esclusione, ma i frammenti come#fragment123non corrispondono.Tag fratelli
I tag
<uri-relative-filter-group>funzionano insieme ai tag<data>fratelli (ovvero i tag<data>al di fuori del<uri-relative-filter-group>, ma all'interno dello stesso<intent-filter>). I tag<uri-relative-filter-group>devono avere tag<data>fratelli per funzionare correttamente perché gli attributi URI sono mutuamente dipendenti a livello di<intent-filter>:- Se per il filtro intent non viene specificato un valore
scheme, tutti gli altri attributi URI vengono ignorati. - Se per il filtro non viene specificato un valore
host, l'attributoporte tutti gli attributipath*vengono ignorati.
I figli
<data>di un<intent-filter>vengono valutati prima di qualsiasi tag<uri-relative-filter-group>. Poi i tag<uri-relative-filter-group>vengono valutati in ordine, ad esempio:<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>
Il filtro accetta
https://project.example.com/path?queryperché corrisponde a<data android:path="/path" />, che non rientra nella regola di esclusione<uri-relative-filter-group>.Caso d'uso comune
Immagina di avere l'URI
https://project.example.com/path, che vuoi associare a unIntenta seconda della presenza o del valore di un parametro di query. Per creare un filtro intent che corrisponda ahttps://project.example.com/pathe blocchihttps://project.example.com/path?query, puoi provare qualcosa di simile a:<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>
In realtà, non funziona. L'URI
https://project.example.com/path?querycorrisponde al percorso/pathe il tag<uri-relative-filter-group>consente parti extra durante la corrispondenza.Modifica il filtro per intent come segue:
<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>
Questo filtro funziona perché le regole di blocco che vietano i parametri di query non vuoti vengono valutate per prime.
Per semplificare il codice, inverti il comportamento in modo da consentire i parametri di query e bloccare gli URI senza parametri di query:
<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>
Caratteri codificati in formato URI
Per trovare una corrispondenza con gli URI contenenti caratteri codificati, scrivi i caratteri non codificati nel filtro, ad esempio:
<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>
Il filtro corrisponde a
?param=value!e?param=value%21.Tuttavia, se nel filtro scrivi i caratteri codificati come segue:
<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>
Il filtro non corrisponde né a
?param=value!né a?param=value%21.Numero di elementi
Puoi inserire un numero illimitato di elementi
<uri-relative-filter-group>all'interno di un<intent-filter>.Altre risorse
Per informazioni sul funzionamento dei filtri per intent, incluse le regole per la corrispondenza degli oggetti intent ai filtri, consulta Intent e filtri per intent e Filtri per intent.
Per informazioni su
<uri-relative-filter-group>, consultaUriRelativeFilterGroupeUriRelativeFilter. - Se per il filtro intent non viene specificato un valore
- attributes:
-
android:allow-
Indica se questo gruppo di filtri relativo all'URI è una regola di inclusione (consenti) anziché una regola di esclusione (blocco). Il valore predefinito è
"true".Valore Descrizione "true"(valore predefinito)Se il gruppo di filtri relativi all'URI corrisponde, il filtro per intent corrisponde "false"Se il gruppo di filtri relativi all'URI corrisponde, il filtro per intent non corrisponde
- introdotto in:
- Livello API 35
- Vedi anche:
-
<intent-filter><data>
<uri-relative-filter-group>
I campioni di contenuti e codice in questa pagina sono soggetti alle licenze descritte nella Licenza per i contenuti. Java e OpenJDK sono marchi o marchi registrati di Oracle e/o delle sue società consociate.
Ultimo aggiornamento 2025-07-27 UTC.
[[["Facile da capire","easyToUnderstand","thumb-up"],["Il problema è stato risolto","solvedMyProblem","thumb-up"],["Altra","otherUp","thumb-up"]],[["Mancano le informazioni di cui ho bisogno","missingTheInformationINeed","thumb-down"],["Troppo complicato/troppi passaggi","tooComplicatedTooManySteps","thumb-down"],["Obsoleti","outOfDate","thumb-down"],["Problema di traduzione","translationIssue","thumb-down"],["Problema relativo a esempi/codice","samplesCodeIssue","thumb-down"],["Altra","otherDown","thumb-down"]],["Ultimo aggiornamento 2025-07-27 UTC."],[],[]]