- 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
Intentprecisas que podem incluir parâmetros de consulta de URI e fragmentos de URI. As regras podem ser de inclusão (permitir) ou de exclusão (bloqueio), dependendo do atributoandroid:allow. 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 filtro relativo ao URI precisa corresponder a uma parte do URI. Pode haver partes do URI que não são especificadas no grupo de filtro relativo do 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 filtro relativo ao URI está presente. O filtro também corresponde ahttps://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 não temparam2=value2.OR e AND
As tags
<data>fora de uma<uri-relative-filter-group>são unidas por OR, enquanto as tags<data>dentro de uma<uri-relative-filter-group>são unidas por AND.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.Por outro lado, o próximo exemplo 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 atributos
pathno 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ãs
As tags
<uri-relative-filter-group>funcionam com as tags<data>irmãs, 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ãs para funcionar corretamente, porque os atributos do 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, o atributoporte todos os atributospath*serão ignorados.
Os filhos
<data>de um<intent-filter>são avaliados antes de qualquer tag<uri-relative-filter-group>. 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 ele corresponde a<data android:path="/path" />, que está fora da regra de exclusão<uri-relative-filter-group>.Caso de uso comum
Imagine que você tenha o URI
https://project.example.com/path, que você quer corresponder a umIntent, dependendo 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 URI
https://project.example.com/path?querycorresponde ao caminho/path, e a tag<uri-relative-filter-group>permite partes extras durante a correspondência.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 bloqueie 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 por URI
Para corresponder a URIs que contêm caracteres codificados em URI, escreva os caracteres brutos 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 qualquer número de elementos
<uri-relative-filter-group>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-
Indica se esse grupo de filtro relativo 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 filtro relativo ao URI corresponder, o filtro de intent vai corresponder "false"Se o grupo de filtro relativo 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 2025-07-27 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 2025-07-27 UTC."],[],[]]