2011-04-01 15 views
32

Me gustaría crear un Intento-filtro, de modo que ciertos enlaces activarán el inicio de mi solicitud (ver este stackoverflow-hilo, por ejemplo: How to register some URL namespace (myapp://app.start/) for accessing your program by calling a URL in browser in Android OS?)Android: Comprensión intención de Filtros

Al tratar, pensé fuera, que no entiendo cómo Intents-Intent-Filters (definidos en el Manifest.xml) realmente funcionan. ¿Cuál es la diferencia entre lo siguiente:

<action android:name="android.intent.action.VIEW" /> 
<action android:name="android.intent.action.MAIN" /> 

o el siguiente:

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

Y lo que es en realidad la diferencia entre categoría y acción intención de filtros. Leí esta página http://developer.android.com/reference/android/content/Intent.html pero aún me falta un entendimiento básico.

Respuesta

88

En lugar de mirarlo desde el punto de vista de su aplicación, dele la vuelta y mírelo desde el lado de la intención.

Cuando se crea una intención, el creador no tiene idea de qué aplicaciones hay en el sistema para manejar esa intención. Pero el creador sí sabe lo que quiere hacer (por ejemplo, una aplicación puede querer que el usuario elija un contacto de algún lugar del dispositivo) y necesita comunicarse con otras aplicaciones del sistema para pedir lo que desea.

Para hacer esto, los Intents tienen varias piezas de información adjuntas. Entre ellos se encuentran acciones y categorías.

Las acciones definen de manera general la acción de la Intención quiere hacer, como ver un contacto, elige una imagen de la galería, etc.

La categoría es una pieza adicional de información que da la Intención otra forma de diferenciarse Por ejemplo, cuando se hace clic en un enlace en el navegador, el Intento que se crea tiene la categoría BROWSABLE adjuntada.

Por lo tanto, cuando el SO resuelva el Intento, buscará actividades registradas o BroadcastReceivers que tengan un filtro de intención que incluya todos de datos. Si el propósito especifica la acción PICK, las actividades que no tienen un filtro de intención con la acción PICK serán descartadas de la lista de candidatos para manejar el Intento.

De esta manera, el conjunto combinado de acciones, categorías, tipos y (posiblemente) el esquema asociado con un Intento sirven para identificar el conjunto de Actividades que pueden manejar el Intento. Cuando configura su filtro de intención en su manifiesto, le está diciendo al sistema operativo qué clase de Intenciones puede manejar.

+2

¡La mejor explicación de todas! Gracias Brian –

+0

Gracias hermano ..... –

+0

lo tengo, que lo que estoy buscando – Hamza

2

tuve que examinar el código de android.content.IntentFilter.matchCategories(Set<String> categories) para entender el juego de categorías:

  1. persona compatible, si su IntentFilter tiene categorías y la intención no proporciona Categorías
  2. persona compatible, si su IntentFilter tiene todas las categorías del Intento. El filtro también puede tener categorías adicionales.
  3. Ningún resultado, si su IntentFilter no tiene categorías y el intento tiene categorías
  4. ninguna coincidencia, si su IntentFilter no tiene las categorías de la Intención tiene

Especialmente # 1 y # 3 no son obvias.

+0

Entonces, si tengo intención con las categorías a, b y filtro de intención a, b, c, ¿el filtro captura la intención entonces? – JohnyTex

+1

Absolutamente correcto. _Lo contrario no es necesario: el filtro de intención puede declarar más categorías que las especificadas en el Intención y el Intento aún pasará._ https://developer.android.com/guide/components/intents-filters.html#Receiving – OneWorld

Cuestiones relacionadas