Intent Filter: qué es, cómo funciona y se usa en el desarrollo

Autor: IT Sectr Publicado: 2026-05-14 Tiempo de lectura: 8 min

Intent Filter es una declaración en AndroidManifest.xml que indica al sistema qué intenciones implícitas puede manejar un componente de la aplicación. Según la Guía para desarrolladores de Android, el filtro contiene action, category y data, con base en los cuales el sistema enruta llamadas de otras aplicaciones y eventos del sistema. El desarrollo Android utiliza Intent Filter como mecanismo principal de acoplamiento débil entre componentes de diferentes aplicaciones.

Puntos clave

  • Intent Filter — una declaración XML en el manifiesto que define los tipos de Intent implícitos que puede manejar una Activity, Service o BroadcastReceiver.
  • Action especifica la acción que debe realizar el componente — por ejemplo, ACTION_VIEW para ver datos o ACTION_SEND para enviar contenido.
  • Category añade una categoría adicional del componente — BROWSABLE permite llamadas desde el navegador, DEFAULT es necesario para Intents implícitos.
  • Data describe el URI, tipo MIME o esquema de los datos manejados, lo cual es fundamental para configurar deep links en una aplicación.
  • Conflictos cuando varias aplicaciones manejan el mismo Intent se resuelven mediante un diálogo de selección del sistema o configuraciones predeterminadas.

¿Qué es Intent Filter?

Intent Filter es un elemento de configuración de una aplicación Android que informa al sistema sobre la capacidad del componente para manejar ciertos tipos de intenciones implícitas. A diferencia de los Intents explícitos que especifican una clase concreta, los Intents implícitos contienen solo una descripción de la acción requerida, y el sistema mismo encuentra un componente adecuado basándose en los filtros registrados.

Los filtros se declaran dentro de un componente — Activity, Service o BroadcastReceiver — en el archivo AndroidManifest.xml. Cada filtro puede contener múltiples elementos action, category y data. Un componente puede tener un número ilimitado de Intent Filters, cada uno describiendo un escenario de manejo diferente.

Rol en la arquitectura Android

Intent Filter implementa el principio de acoplamiento débil entre componentes de aplicaciones. La aplicación A no tiene que conocer la existencia de la aplicación B — simplemente envía un Intent con la descripción de la acción, y el sistema lo enruta según los filtros. Este mecanismo subyace en Share Sheet, la selección del navegador y el manejo de deep links.

Tipos de Intent: explícitos e implícitos

Los Intents explícitos especifican una clase de componente concreta para iniciar. Se utilizan para la navegación interna dentro de una sola aplicación cuando el desarrollador sabe exactamente qué Activity debe abrirse. Los Intents implícitos contienen solo una descripción de la acción, y el componente lo determina el sistema dinámicamente.

Intent Filter funciona exclusivamente con Intents implícitos. Si un Intent especifica una clase concreta, el sistema ignora todos los filtros e inicia el componente indicado directamente. Los filtros se verifican solo al resolver llamadas implícitas, lo que los convierte en un elemento clave de la interacción entre aplicaciones.

Comparación de Intents explícitos e implícitos

CaracterísticaIntent explícitoIntent implícito
ComponenteEspecificado explícitamente (className)Determinado por el sistema
Intent FilterNo requeridoRequerido
EjemplostartActivity(Intent(this, ProfileActivity::class.java))Intent(ACTION_VIEW, Uri.parse(“ https://example.com”))
SeguridadMayor (sin intercepción)Menor (posibles conflictos)

Estructura de Intent Filter en el manifiesto

Cada Intent Filter consta de tres grupos de elementos — action, category y data — cuya combinación determina qué Intents recibirá el componente. Un filtro se considera cumplido si el Intent coincide con al menos un elemento de cada grupo.

Action describe la acción que se realiza — ver, editar, enviar. Category añade un contexto de procesamiento adicional — por ejemplo, la capacidad de iniciarse desde el navegador. Data define el formato de la información manejada mediante URI o tipo MIME.

Componentes de la etiqueta intent-filter

Ejemplo de un Intent Filter para una Activity que abre enlaces a perfiles de usuario. El filtro incluye los tres grupos de elementos para un enrutamiento preciso.

xml
<activity android:name=".ProfileActivity">
    <intent-filter>
        <action
            android:name="android.intent.action.VIEW" />
        <category
            android:name="android.intent.category.DEFAULT" />
        <category
            android:name="android.intent.category.BROWSABLE" />
        <data
            android:scheme="myapp"
            android:host="profile" />
    </intent-filter>
</activity>

Tenga en cuenta la especificación obligatoria de category DEFAULT — sin ella el sistema no transmitirá Intents implícitos al componente. La categoría BROWSABLE se añade si el enlace debe manejarse desde un navegador.

Un deep link en Android se configura mediante un Intent Filter con action VIEW y una etiqueta data que contiene el esquema, host y ruta. Al seguir un enlace como myapp://profile/42, el sistema encuentra una Activity con un filtro coincidente y la inicia con el URI pasado. Es importante configurar correctamente pathPrefix, pathPattern o path para una coincidencia exacta.

A partir de Android 6 (API 23) se agregó soporte para App Links — deep links verificados mediante HTTPS. Los App Links usan el mismo Intent Filter pero con verificación adicional del dominio a través de Digital Asset Links. Después de la verificación, el sistema abre automáticamente la aplicación sin un diálogo de selección.

Etiqueta Data para URL

Ejemplo de un filtro para App Link con verificación mediante enlace HTTPS. En este caso, el esquema siempre es https y el host coincide con el dominio especificado en Digital Asset Links.

xml
<intent-filter android:autoVerify="true">
    <action
        android:name="android.intent.action.VIEW" />
    <category
        android:name="android.intent.category.DEFAULT" />
    <category
        android:name="android.intent.category.BROWSABLE" />
    <data
        android:scheme="https"
        android:host="example.com"
        android:pathPrefix="/profile" />
</intent-filter>

El atributo autoVerify indica al sistema que verifique los Digital Asset Links cuando se instala la aplicación. Si la verificación pasa correctamente, la aplicación se convierte automáticamente en el controlador predeterminado para el dominio y rutas especificados.

Manejo de Intent en componentes de la aplicación

Después de que el sistema ha seleccionado un componente para manejar el Intent, el desarrollador debe extraer los datos del intent entrante dentro del componente destino. Para Activity se usa el método getIntent() en onCreate(); para BroadcastReceiver, el método onReceive(), donde Intent se pasa como parámetro.

La extracción de datos incluye obtener la action para determinar el tipo de operación, data para el URI y parámetros extra para información adicional. Cada uno de estos elementos puede estar ausente, por lo que es obligatoria una verificación de null antes de usarlos.

Código de manejo en Activity

Ejemplo de manejo de un deep link entrante en una Activity en Kotlin. El código extrae el URI del Intent y toma decisiones de navegación basadas en el host y la ruta.

kotlin
class ProfileActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        val uri = intent?.data
        if (uri?.host == "profile") {
            val userId = uri.lastPathSegment
            loadProfile(userId)
        }
    }
}

Se recomienda usar el operador safe call para verificar intent y data por null, ya que la actividad puede iniciarse sin un deep link entrante. También debe verificar host y pathSegment por null antes de usarlos en la navegación.

Prioridad y resolución de conflictos

Si varias aplicaciones han registrado un Intent Filter que coincide con el mismo Intent implícito, el sistema muestra al usuario un diálogo de selección. El usuario puede seleccionar una aplicación para uso único o establecer un controlador predeterminado. A partir de Android 10, el diálogo de selección se muestra solo en la primera llamada, después de lo cual el sistema recuerda la elección del usuario.

Para gestionar la prioridad se utiliza el atributo android:priority en la etiqueta intent-filter. Cuanto mayor sea el valor, mayor prioridad tiene el componente al resolver conflictos. Sin embargo, la prioridad no funciona para filtros de diferentes aplicaciones — en este caso siempre se muestra un diálogo de selección si ninguna aplicación está establecida como predeterminada.

Diálogo de selección de aplicación

El desarrollador puede llamar programáticamente al diálogo de selección mediante Intent.createChooser(), pasando el Intent destino y un título. Esto es útil cuando una aplicación quiere ofrecer explícitamente al usuario que elija un controlador, incluso si hay una aplicación predeterminada establecida. Por ejemplo, al enviar imágenes a redes sociales mediante ACTION_SEND con createChooser garantiza que se muestre el diálogo independientemente de la configuración predeterminada.

Errores típicos al configurar Intent Filter

Uno de los errores más comunes es la ausencia de la categoría DEFAULT en el Intent Filter. Los desarrolladores copian la configuración de ejemplos pero olvidan añadir esta categoría, como resultado la Activity no recibe Intents implícitos. El sistema simplemente no ve el filtro para llamadas implícitas, aunque los Intents explícitos siguen funcionando.

El segundo error común es la especificación incorrecta de scheme en la etiqueta data sin un URI completo. Si solo se especifica el esquema pero no el host, el filtro aceptará todos los enlaces con este esquema de cualquier fuente, lo que puede provocar llamadas no deseadas desde fuentes no confiables. Se recomienda especificar siempre al menos scheme y host.

El tercer error es la ausencia de verificación de null para intent.data en el código de la Activity. Si la Activity se inicia no a través de un deep link sino de forma estándar desde el lanzador, el Intent no contiene un URI. Acceder a intent.data sin verificación provoca una NullPointerException y bloquea la aplicación. Siempre use intent?.data?.toString() con el operador safe call.

Preguntas frecuentes

¿Es obligatorio especificar category DEFAULT en Intent Filter?

Sí, la categoría DEFAULT es obligatoria para recibir Intents implícitos. Sin ella, el sistema no transmitirá llamadas implícitas al componente, y el Intent Filter solo funcionará para Intents explícitos, que de todos modos no verifican filtros.

¿Cuántos Intent Filters puede tener una Activity?

No hay límite. Una Activity puede contener cualquier cantidad de Intent Filters. Cada filtro describe un escenario de manejo diferente, por ejemplo un filtro para deep links, otro para manejo de archivos, un tercero para Share Sheet.

¿En qué se diferencia Intent Filter de App Link?

Intent Filter es un mecanismo general para manejar Intents implícitos. App Link es un caso especial de Intent Filter con verificación mediante Digital Asset Links, que asigna automáticamente la aplicación como controlador predeterminado para enlaces HTTPS en un dominio especificado.

¿Se puede usar Intent Filter para Service o BroadcastReceiver?

Sí, Intent Filter se puede declarar no solo para Activity, sino también para Service y BroadcastReceiver. Para Service permite ejecutar un servicio en segundo plano desde otras aplicaciones, para BroadcastReceiver — recibir mensajes de difusión del sistema.

¿Cómo maneja Intent Filter los tipos MIME?

El tipo MIME se especifica en la etiqueta data mediante el atributo mimeType. El filtro determina qué tipos de datos puede manejar el componente — por ejemplo, image/* para todas las imágenes o text/plain solo para texto plano. Los tipos MIME pueden combinarse con esquemas URI.

Resumen

  • Intent Filter — una declaración XML en AndroidManifest.xml que define qué Intents implícitos puede manejar un componente de la aplicación.
  • Tres grupos — action, category, data (URI y MIME) componen el filtro; el componente recibe el Intent si coinciden todos los grupos especificados.
  • Deep link se configura mediante action VIEW y una etiqueta data con esquema, host y ruta, opcionalmente con autoVerify para App Links.
  • App Links — enlaces HTTPS verificados mediante Digital Asset Links que no requieren un diálogo de selección de aplicación.
  • Conflictos cuando coinciden varios filtros se resuelven mediante un diálogo del sistema o prioridad para componentes de la misma aplicación.
  • Manejo del Intent entrante se realiza mediante intent.data en Activity o onReceive en BroadcastReceiver con verificación obligatoria de null.
  • Uso — Intent Filter se utiliza para la interacción entre aplicaciones, manejo de enlaces, archivos y eventos del sistema.

Desarrollaremos una aplicación móvil llave en mano

IT Sectr crea aplicaciones para iOS y Android para startups y empresas desde 2017. Le asesoraremos y le propondremos la mejor solución.

Discutir el proyecto

Lea también