- sintassi:
-
<uri-relative-filter-group android:allow=["true" | "false"]> <data ... /> ... </uri-relative-filter-group>
- contenuto in:
-
<intent-filter> - può contenere:
-
<data> - description:
-
Crea regole di corrispondenza precise
Intentche possono includere parametri di query URI e frammenti URI. Le regole possono essere di inclusione (allow) o di esclusione (blocking) regole, 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 esistere parti dell'URI non specificate nel gruppo di filtri relativi 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 a
https://project.example.com/any/path/here?param1=value1¶m2=value2¶m3=value3perché è presente tutto ciò che è specificato dal gruppo di filtri relativi 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 corrisponde ahttps://project.example.com/any/path/here?param1=value1, a cui mancaparam2=value2.OR e AND
I tag
<data>esterni a un<uri-relative-filter-group>sono collegati con OR, mentre i tag<data>all'interno di un<uri-relative-filter-group>sono collegati con 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
/prefixOR terminano consuffix.Al contrario, l'esempio seguente corrisponde ai percorsi che iniziano con
/prefixAND 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ù
pathattributi nello 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 che venga valutata la regola di esclusione, ma i frammenti come#fragment123non corrispondono.Tag fratelli
<uri-relative-filter-group>I tag<data>funzionano insieme ai tag<data>fratelli (ovvero i tag<data>che si trovano all'esterno di<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 reciprocamente dipendenti a livello di<intent-filter>:- Se non viene specificato un
schemeper il filtro per intent, tutti gli altri attributi URI vengono ignorati. - Se non viene specificato un
hostper il filtro, l'attributoporte tutti gli attributipath*vengono ignorati.
I figli
<data>di un<intent-filter>vengono valutati prima di qualsiasi<uri-relative-filter-group>tag. 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 si trova all'esterno della<uri-relative-filter-group>regola di esclusione.Caso d'uso comune
Supponiamo di avere l'URI
https://project.example.com/path, che vuoi far corrispondere a unIntenta seconda della presenza o del valore di un parametro di query. Per creare un filtro per intent che corrisponda ahttps://project.example.com/pathe blocchihttps://project.example.com/path?query, potresti provare a fare quanto segue:<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'
https://project.example.com/path?queryURI corrisponde al percorso/pathe il<uri-relative-filter-group>tag consente parti aggiuntive 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 URI
Per trovare una corrispondenza con gli URI che contengono caratteri codificati in URI, scrivi i caratteri non codificati non elaborati 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 scrivi i caratteri codificati nel filtro 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 qualsiasi di
<uri-relative-filter-group>elementi 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 con i filtri, consulta Intent e filtri per intent e Filtri per intent.
Per informazioni su
<uri-relative-filter-group>, consultaUriRelativeFilterGroupeUriRelativeFilter. - Se non viene specificato un
- attributi:
-
android:allow-
Indica se questo gruppo di filtri relativi all'URI è una regola di inclusione (allow) anziché
una regola di esclusione (blocking). 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
- introdotta 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 2026-04-21 UTC.
[null,null,["Ultimo aggiornamento 2026-04-21 UTC."],[],[]]