- Sintaxe:
-
<uri-relative-filter-group android:allow=["true" | "false"]> <data ... /> ... </uri-relative-filter-group>
- contido em:
-
<intent-filter> - pode conter:
-
<data> - descrição:
-
Cria regras de correspondência precisas
Intentque podem incluir parâmetros de consulta e fragmentos de URI. As regras podem ser de inclusão (permitir) ou exclusão (bloqueio) regras, dependendo doandroid:allowatributo. As regras de correspondência são especificadas pelos atributospath*,fragment*equery*dos elementos<data>contidos.Correspondência
Para corresponder a um URI, cada parte do grupo de filtros relativos ao URI precisa corresponder a uma parte do URI. Pode haver partes do URI que não são especificadas no grupo de filtros relativos ao URI. Exemplo:
<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>
O filtro corresponde a
https://project.example.com/any/path/here?param1=value1¶m2=value2¶m3=value3porque tudo especificado pelo grupo de filtros relativos ao URI está presente. O filtro também correspondehttps://project.example.com/any/path/here?param2=value2¶m1=value1porque a ordem dos parâmetros de consulta não importa. No entanto, o filtro não corresponde ahttps://project.example.com/any/path/here?param1=value1, que está faltandoparam2=value2.OR e AND
<data>tags fora de um<uri-relative-filter-group>são ORed, enquanto<data>tags dentro de um<uri-relative-filter-group>são ANDed.Veja o exemplo a seguir:
<intent-filter...> <data android:scheme="https" android:host="project.example.com" /> <data android:pathPrefix="/prefix" /> <data android:pathSuffix="suffix" /> ... </intent-filter>
O filtro corresponde a caminhos que começam com
/prefixOU terminam comsuffix.Em contraste, o exemplo a seguir corresponde a caminhos que começam com
/prefixE terminam comsuffix:<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>
Como resultado, vários
pathatributos no mesmo<uri-relative-filter-group>não correspondem a nada:<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>
Ordem de declaração
Veja o exemplo a seguir:
<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>
O filtro corresponde ao fragmento
#fragmentporque uma correspondência é encontrada antes que a regra de exclusão seja avaliada, mas fragmentos como#fragment123não correspondem.Tags irmãos
<uri-relative-filter-group>As tags<data>funcionam com as tags<data>irmãos (ou seja, tags<data>que estão fora do<uri-relative-filter-group>, mas dentro do mesmo<intent-filter>). As tags<uri-relative-filter-group>precisam ter tags<data>irmãos para funcionar corretamente, porque os atributos de URI são mutuamente dependentes no nível<intent-filter>:- Se um
schemenão for especificado para o filtro de intent, todos os outros atributos de URI serão ignorados. - Se um
hostnão for especificado para o filtro, oportatributo e todos ospath*atributos serão ignorados.
Os filhos
<data>de um<intent-filter>são avaliados antes de qualquer<uri-relative-filter-group>tags. Em seguida, as tags<uri-relative-filter-group>são avaliadas em ordem, por exemplo:<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>
O filtro aceita
https://project.example.com/path?queryporque corresponde a<data android:path="/path" />, que está fora da<uri-relative-filter-group>regra de exclusão.Caso de uso comum
Imagine que você tenha o URI
https://project.example.com/path, que você quer corresponder a umIntentdependendo da presença ou do valor de um parâmetro de consulta. Para criar um filtro de intent que corresponda ahttps://project.example.com/pathe bloqueiehttps://project.example.com/path?query, tente algo como:<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>
Isso, na verdade, não funciona. O
https://project.example.com/path?queryURI corresponde ao caminho/path, e a<uri-relative-filter-group>tag permite extra partes quando está correspondendo.Revise o filtro de intent da seguinte maneira:
<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>
Esse filtro funciona porque as regras de bloqueio que proíbem parâmetros de consulta não vazios são avaliadas primeiro.
Para simplificar o código, inverta o comportamento para permitir parâmetros de consulta e bloquear URIs sem parâmetros de consulta:
<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>
Caracteres codificados em URI
Para corresponder a URIs que contêm caracteres codificados em URI, escreva os caracteres brutos e não codificados no filtro, por exemplo:
<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>
O filtro corresponde a
?param=value!e?param=value%21.No entanto, se você escrever caracteres codificados no filtro da seguinte maneira:
<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>
O filtro não corresponde a
?param=value!nem a?param=value%21.Número de elementos
Você pode colocar quantos
<uri-relative-filter-group>elementos quiser dentro de um<intent-filter>.Outros recursos
Para mais informações sobre como os filtros de intent funcionam, incluindo as regras de correspondência dos objetos de intent com os filtros, consulte Intents e filtros de intent e Filtros de intent.
Para informações sobre
<uri-relative-filter-group>, consulteUriRelativeFilterGroupeUriRelativeFilter. - Se um
- atributos:
-
android:allow-
Se esse grupo de filtros relativos ao URI é uma regra de inclusão (permitir) em vez de
uma regra de exclusão (bloqueio). O valor padrão é
"true".Valor Descrição "true"(padrão)Se o grupo de filtros relativos ao URI corresponder, o filtro de intent vai corresponder "false"Se o grupo de filtros relativos ao URI corresponder, o filtro de intent não vai corresponder
- introduzido em:
- Nível 35 da API
- veja também:
-
<intent-filter><data>
<uri-relative-filter-group>
O conteúdo e os exemplos de código nesta página estão sujeitos às licenças descritas na Licença de conteúdo. Java e OpenJDK são marcas registradas da Oracle e/ou suas afiliadas.
Última atualização 2026-04-21 UTC.
[[["Fácil de entender","easyToUnderstand","thumb-up"],["Meu problema foi resolvido","solvedMyProblem","thumb-up"],["Outro","otherUp","thumb-up"]],[["Não contém as informações de que eu preciso","missingTheInformationINeed","thumb-down"],["Muito complicado / etapas demais","tooComplicatedTooManySteps","thumb-down"],["Desatualizado","outOfDate","thumb-down"],["Problema na tradução","translationIssue","thumb-down"],["Problema com as amostras / o código","samplesCodeIssue","thumb-down"],["Outro","otherDown","thumb-down"]],["Última atualização 2026-04-21 UTC."],[],[]]