- sintaxis:
-
<uri-relative-filter-group android:allow=["true" | "false"]> <data ... /> ... </uri-relative-filter-group>
- se incluye en:
-
<intent-filter> - puede contener:
-
<data> - descripción:
-
Crea reglas de coincidencia de
Intentprecisas que pueden incluir parámetros de consulta de URI y fragmentos de URI. Las reglas pueden ser de inclusión (permitir) o de exclusión (bloqueo) reglas, según el atributoandroid:allow. Las reglas de coincidencia se especifican mediante lospath*,fragment*yquery*atributos de los elementos<data>incluidos.Coincidencias
Para que coincida un URI, cada parte del grupo de filtros relativos de URI debe coincidir con una parte del URI. Puede haber partes del URI que no se especifiquen en el grupo de filtros relativos de URI. Por ejemplo:
<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>
El filtro coincide con
https://project.example.com/any/path/here?param1=value1¶m2=value2¶m3=value3porque está presente todo lo que especifica el grupo de filtros relativos de URI. El filtro también coincide porque el orden de los parámetros de consulta no importa.https://project.example.com/any/path/here?param2=value2¶m1=value1Sin embargo, el filtro no coincide conhttps://project.example.com/any/path/here?param1=value1, al que le faltaparam2=value2.OR y AND
Las etiquetas
<data>fuera de un<uri-relative-filter-group>se unen con OR, mientras que las etiquetas<data>dentro de un<uri-relative-filter-group>se unen con AND.Consulta el siguiente ejemplo:
<intent-filter...> <data android:scheme="https" android:host="project.example.com" /> <data android:pathPrefix="/prefix" /> <data android:pathSuffix="suffix" /> ... </intent-filter>
El filtro coincide con las rutas de acceso que comienzan con
/prefixO terminan consuffix.Por el contrario, el siguiente ejemplo coincide con las rutas de acceso que comienzan con
/prefixY terminan 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>
Como resultado, varios
pathatributos en el mismo<uri-relative-filter-group>no coinciden con 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>
Orden de declaración
Consulta el siguiente ejemplo:
<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>
El filtro coincide con el fragmento
#fragmentporque se encuentra una coincidencia antes de que se evalúe la regla de exclusión, pero los fragmentos como#fragment123no coinciden.Etiquetas del mismo nivel
<uri-relative-filter-group>Las etiquetas<data>funcionan junto con sus etiquetas<data>del mismo nivel (es decir, las etiquetas<data>que están fuera de<uri-relative-filter-group>pero dentro del mismo<intent-filter>). Las etiquetas<uri-relative-filter-group>deben tener etiquetas<data>del mismo nivel para funcionar correctamente, ya que los atributos de URI son mutuamente dependientes en el nivel<intent-filter>:- Si no se especifica un
schemepara el filtro de intent, el sistema ignora todos los demás atributos del URI. - Si no se especifica un
hostpara el filtro, se ignora elporty todos lospath*se ignoran.
Los elementos secundarios
<data>de un<intent-filter>se evalúan antes que cualquier<uri-relative-filter-group>etiquetas. Luego, las etiquetas<uri-relative-filter-group>se evalúan en orden, por ejemplo:<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>
El filtro acepta
https://project.example.com/path?queryporque coincide con<data android:path="/path" />, que está fuera de la regla de exclusión<uri-relative-filter-group>.Caso de uso habitual
Imagina que tienes el URI
https://project.example.com/path, que deseas hacer coincidir con unIntentsegún la presencia o el valor de un parámetro de consulta. Para crear un filtro de intents que coincida conhttps://project.example.com/pathy bloqueehttps://project.example.com/path?query, puedes probar algo como lo siguiente:<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>
De hecho, esto no funciona. El URI
https://project.example.com/path?querycoincide con la ruta de acceso/path, y la etiqueta<uri-relative-filter-group>permite partes adicionales cuando coincide.Revisa el filtro de intents de la siguiente manera:
<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>
Este filtro funciona porque las reglas de bloqueo que prohíben los parámetros de consulta no vacíos se evalúan primero.
Para simplificar el código, cambia el comportamiento para permitir parámetros de consulta y bloquear URIs sin 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 en URI
Para que coincidan los URIs que contienen caracteres codificados en URI, escribe los caracteres sin procesar y sin codificar en el filtro, por ejemplo:
<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>
El filtro coincide con
?param=value!y?param=value%21.Sin embargo, si escribes caracteres codificados en el filtro de la siguiente manera:
<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>
El filtro no coincide con
?param=value!ni con?param=value%21.Cantidad de elementos
Puedes colocar todos los
<uri-relative-filter-group>elementos que quieras dentro de un<intent-filter>.Recursos adicionales
Para obtener información sobre el funcionamiento de los filtros de intents, incluidas las reglas sobre cómo se comparan los objetos de intents con los filtros, consulta Intents y filtros de intents y Filtros de intents.
Para obtener información sobre
<uri-relative-filter-group>, consultaUriRelativeFilterGroupyUriRelativeFilter. - Si no se especifica un
- atributos:
-
android:allow-
Indica si este grupo de filtros relativos de URI es una regla de inclusión (permitir) en lugar de
una regla de exclusión (bloqueo). El valor predeterminado es
"true".Valor Descripción "true"(predeterminado)Si el grupo de filtros relativos de URI coincide, el filtro de intents coincide. "false"Si el grupo de filtros relativos de URI coincide, el filtro de intents no coincide.
- primera inclusión:
- Nivel de API 35
- consulta también:
-
<intent-filter><data>
<uri-relative-filter-group>
El contenido y las muestras de código que aparecen en esta página están sujetas a las licencias que se describen en la Licencia de Contenido. Java y OpenJDK son marcas registradas de Oracle o sus afiliados.
Última actualización: 2026-04-21 (UTC)
[null,null,["Última actualización: 2026-04-21 (UTC)"],[],[]]