2010-07-03 13 views
19

He leído muchos artículos sobre filtros de intención y realmente no puedo entender exactamente lo que hacen.¿Qué son los filtros de intención exactamente?

así que por favor si alguien me puede explicar con un claro ejemplo, ¿cuál es la función de los filtros de intención exactamente?

gracias

+0

Creo que no es un problema cuando uno no puede resolver algo debido a un malentendido –

+0

aquí hay una publicación al respecto http://android-pro.blogspot.com/search/label/Intent%20Filters –

Respuesta

19

Creo que es bien documentado here. Resumiendo, cuando (por ejemplo) transfiere un intento a Context.startActivity o Context.startService, o lo transmite con Context.sendBroadcast, etc., ¿qué actividad o servicio (o qué conjunto de receptores de difusión) se entrega?

Respuesta: si la intención es "explícita", es decir, tiene el campo del nombre del componente establecido, se envía al componente de destino que designa, esto normalmente ocurre en la comunicación dentro de una aplicación.

De lo contrario (intención "implícita", como es típico para la comunicación entre las aplicaciones), Android debe determinar la mejor actividad o servicio (o conjunto de receptores) por sí mismo. ¿Cómo lo hace Android? Ahí es donde entran en filtros, y cito:

Lo hace mediante la comparación de los contenidos del objeto Intención de intención filtros, estructuras asociadas con componentes que potencialmente puede recibir intenciones. Los filtros anuncian las capacidades de un componente y delimitan las intenciones que puede manejar. Abren el componente a la posibilidad de recibir implícitos intents del tipo anunciado. Si un componente no tiene ningún filtro , solo puede recibir intentos explícitos de . Un componente con filtros puede recibir intentos explícitos e implícitos de .

La página web en cuestión continúa con muchos detalles y, al final, un ejemplo completo y simple, y creo que sería redundante copiarlos y pegarlos aquí.

+0

¿Puede por favor dar un ejemplo con código para una intención implícita que pueden manejar muchas actividades y cómo los filtros de intención pueden limitar el manejo a una sola actividad. –

+1

@Mina, ¿cómo podría agregar valor al ejemplo del Bloc de notas en la página que ya señalé, http://developer.android.com/guide/topics/intents/intents-filters.html?! Tiene tres actividades, cada una con filtros de intención, y una explicación muy clara (el "código" es en realidad todo XML, por supuesto). Normalizando el texto explicativo para líneas de longitud razonable, hay más de 200 líneas (nadie acusó a XML de ser demasiado conciso ;-) - ¿cuál sería el valor agregado de copiar y pegar esa gran cantidad de texto que puedes leer perfectamente en línea? ¡¿tú mismo?! –

+0

Gracias Alex, pero lo que quería es un ejemplo de un Intento que pueda ser manejado por múltiples actividades –

4

Un intent filter le permite al sistema saber qué datos o solicitudes de servicio puede manejar un componente. Un componente puede ser una actividad, servicio o receptor de difusión.

Si está escribiendo un visor de imágenes, debería agregar un filtro de intenciones (o varias) al manifiesto que describe las imágenes que puede manejar. Si está escribiendo un explorador de archivos, puede empaquetar los detalles de un archivo de imagen en un intento, y el sistema examinará los filtros de intención hasta que encuentre la mejor coincidencia para manejar esa imagen. Lo mismo aplica para cualquier tipo de datos o servicios que puedan pasarse de un componente al siguiente.

4

En pocas palabras, los filtros de intención son una manera de decirle al sistema operativo cómo iniciar/comunicarse con las diferentes actividades/servicios/receptores de difusión en su aplicación. Entonces, por ejemplo, si desea enlaces que comiencen con http://www.mycompany.com para dirigir a las personas a su aplicación, un filtro de intención es la forma de lograrlo. Una vez configurada, cada vez que alguien haga clic en un enlace que comience con eso (en cualquier aplicación) se le presentará al usuario la opción de usar su aplicación para ver esa página. Probablemente hayas visto esto con las urls de youtube. Del mismo modo, si desea que el enlace 'compartir' que se ve comúnmente en muchas aplicaciones enumere su aplicación, usaría un filtro de intención para hacerlo.

Espero que esto ayude ...

+1

¿Puede darme un ejemplo de tal filtro de intención –

1

IntentFilters se utilizan para declarar un patrón de atributos de intención a los que responderá el componente declarante. Puede especificar con un IntentFilter que una actividad, servicio o BroadcastReceiver determinado responderá a una combinación de acción, tipo de mimo de datos, esquema, ruta, etc. Por ejemplo, si registra una actividad con IntentFilter para ACTION_SEND con tipo de datos "texto/normal" ", se llamará a su actividad cada vez que los usuarios deseen enviar algún texto.

0

El filtro de intenciones le indica al sistema android cuál es la intención o el evento que deben escuchar los componentes de Android (actividad, servicio, receptor de difusión).

2

Intención filtros es una manera de decirle sistema operativo que déjame manejar/proporciono este tipo de actividades/servicios

Mediante la adición de filtro dado a manifestar dice SO que yo también puedo manejar el servicio de SMS y cada vez que enviar sms se mostrará en una lista o también puede usarlo explícitamente como su servicio de sms.

<intent-filter> 

    <action android:name="android.intent.action.SENDTO" /> 

    <action android:name="com.example.code.SMS_INTENT" /> 

    <category android:name="android.intent.category.DEFAULT" /> 

    <data android:scheme="smsto" /> 

</intent-filter> 

Y para el uso de este servicio de forma explícita llamar así ...

Intent intent = new Intent("com.example.code.SMS_INTENT", Uri.parse(uri)); 

intent.putExtra("from", "code"); 

startActivity(intent); 
3

intentFilters anuncian las capacidades de un componente y delimitan las intenciones que pueden manejar. un IntentFilter que una actividad determinada, Servicio o BroadcastReceiver responderá a una combinación de acción, los datos tipo mime, esquema, trayectoria, etc.

La intención comparando la intención de filtros intención basado en tres aspectos :

1: - La acción intención
2: - Los datos de intención (tanto URI y el tipo de datos)
3: - La intención categoría

acción:
Declara la acción de intento aceptada, en el atributo de nombre . El valor debe ser el valor de cadena literal de una acción, , no la constante de clase.

datos:
Declara el tipo de datos aceptado, usando uno o más atributos que especifican diversos aspectos de la URI de datos (esquema, host, puerto, trayectoria, etc.) y el tipo MIME.

categoría:
Declara la categoría intención aceptado, en el atributo de nombre. El valor debe ser el valor de cadena literal de una acción, , no la constante de clase.

Por ejemplo, esta actividad maneja acciones de "ENVIAR" con datos de texto.

<intent-filter> 
    <action android:name="android.intent.action.SEND"/> 
    <category android:name="android.intent.category.DEFAULT"/> 
    <data android:mimeType="text/plain"/> 
</intent-filter> 
+0

que usamos 'intent-filter' para manejar la solicitud desde fuera de la aplicación? – UnKnown

+0

Sí, cuando su aplicación está instalada en un dispositivo, el sistema identifica sus filtros de intención y agrega la información a un catálogo interno de intenciones admitidas por todas las aplicaciones instaladas. –

+0

Solo para confirmar. Si no vamos a manejar solicitudes externas de otras aplicaciones. entonces no necesitamos usar 'intent-filter'? – UnKnown

0

La parte de filtro intención en el archivo de manifiesto de Android, cuenta el tiempo de ejecución de Android que esta actividad debe ser registrado como un posible punto de entrada en la aplicación y puesta a disposición en el lanzador del sistema Android.

Cuestiones relacionadas