programacion - Android: comprensión de los filtros de intención
manual de android en pdf (2)
En lugar de mirarlo desde el punto de vista de tu aplicación, dale la vuelta y míralo desde el lado de la intención.
Cuando se crea un Intento, el creador no tiene idea de qué aplicaciones hay en el sistema para manejar ese Intento. Pero el creador sí sabe lo que quiere hacer (por ejemplo, una aplicación puede querer que el usuario seleccione un contacto de algún lugar del dispositivo) y necesita comunicarse con otras aplicaciones del sistema para pedir lo que desea.
Para hacer esto, Intents tiene varias piezas de información adjuntas. Entre ellos se encuentran acciones y categorías.
Las acciones definen de forma general la acción que el Intento desea hacer, como VER UN CONTACTO, ELEGIR una imagen de la Galería, etc.
La categoría es una información adicional que le da al Intento 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 Intent, buscará Actividades registradas o BroadcastReceivers que tengan un filtro de intención que incluya todos los elementos de información. 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 forma, el conjunto combinado de acciones, categorías, tipos y (posiblemente) esquemas asociados 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.
Me gustaría crear un filtro de intenciones, de modo que ciertos enlaces desencadenarán el inicio de mi aplicación (consulte este stackoverflow-thread, por ejemplo: Cómo registrar un espacio de nombres de URL (myapp: //app.start/) para acceder a su programa llamando a una URL en el navegador en el sistema operativo Android? )
Al intentarlo, me di cuenta de que no entiendo cómo funcionan realmente las Intenciones y los Filtros de Intención (definidos en el Manifest.xml). Cuál es la diferencia entre lo siguiente:
<action android:name="android.intent.action.VIEW" />
<action android:name="android.intent.action.MAIN" />
o lo siguiente:
<category android:name="android.intent.category.LAUNCHER" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.MAIN" />
Y cuál es en realidad la diferencia entre categoría y acción Intent-Filters. Leí esta página http://developer.android.com/reference/android/content/Intent.html pero todavía me falta una comprensión básica.
Tuve que examinar el código de android.content.IntentFilter.matchCategories(Set<String> categories)
para comprender la coincidencia de categorías:
- Una coincidencia exitosa, si su IntentFilter tiene categorías y el Intento no proporciona Categorías
- Coincidencia exitosa, si su IntentFilter tiene todas las categorías del Intento. El filtro también puede tener categorías adicionales.
- Sin coincidencia, si su IntentFilter no tiene categorías y el Intento tiene categorías
- No hay coincidencia, si su IntentFilter no tiene las categorías que el Intento tiene
Especialmente # 1 y # 3 no son obvios.