Usuario:ManuelRomero/Android/Intents

Intents
http://developer.android.com/reference/android/content/Intent.html
 * Referencia
 * Definición de la página oficial


 * Los objetos de tipo android.content.Intent se utilizan para enviar mensajes asíncronos dentro de una aplicación o entre varias aplicaciones.
 * Estos mensajes permiten desde una aplicación lanzar o invocar la ejecución de un componente de aplicación
 * 1) Activity.
 * 2) Service.
 * 3) ContentProvider.
 * 4) Boradcast.


 * Así, los Intents permiten enviar o recibir información desde y hacia otros componetes de aplicación.
 * Esta información puede consistir simplemente en iniciar la ejecución de una aplicación en android, por ejemplo una actividad.

Intents para lanzar activity

 * Un Intent es un objeto que tiene una estructura de datos que contiene la información necesaria para lazar la ejecución de un componente.
 * Este componentes puede ser como ya hemos comentado una activity desarrollada en nuestra aplicación o bien también podemos ejecutar una aplicación disponible en android http://developer.android.com/guide/appendix/g-app-intents.html
 * Al Intent se le puede asociar la Activity que queremos que se lance, o bien a la Activity asociarle un nombre de accion para que el Intent tenga asociada dicha accion y al invocarlo se puda ejecutar la Activity que tenga asociada dicha acción
 * La forma de asociar a una Activity, una acción usado el elemento  en el fichero Manifest de nuestra activity

Usando un Intent

 * Un intent necesita información para saber qué aplicación tiene que lanzar
 * Esta información la podemos pasar de diferente manera.
 * Desde el punto de vista de la información, un Intent es una estructura de datos con la siguiente composición :
 * 1) component, es el componente de la aplicación que queremos que se ejecute.
 * 2) action, indica la acción asociada al Intent. con ella trataremos de encontrar los componetes que llevan a caba esa acción.
 * 3) data, son los datos necesarios para una determinada accion.
 * 4) category, forma de agrupar actividades que detallan conciones que  pueden hacer
 * 5) extra, permite dar valores a un objeto Bundle en formato etiqueta-valor; Con ello podremos pasar valores al componentes que invoquemos.
 * 6) type, especifica de forma explícita el tipo de datos del intent.
 * Vamos a ver a continuación como se puede usar un Intent

Intent Explícito o Implícito
Intent(Context packageContext, Class<?> cls) getComponent(...), getClass(...) getClassName(...). getComponent
 * Intent explícito
 * Un intent es explícito cuando de forma explícita detallamos el componente que queremos lanzar.
 * Para ello detallaremos el componente.
 * Esto se puede hacer en el contructor o usando métodos explícitos de la clase
 * En el constructor
 * Usando métodos de la clase Intent para establecer el componente que queremos invocar
 * Y para recuperar el nombre del componente
 * Ejemplo
 * Intent Implícito
 * En este caso creamos el intent pasando un nombre de accion.
 * El sistema buscará qué actividad puede realizar esa acción y la ejecutará.
 * En caso de haber más de una actividad que pueda realizar esa acción nos mostrará la lista para que la realicemos.
 * La forma de asociar a una Activity una acción es usando el elemento  del fichero manifest
 * La accion la podemos pasar en el constructor del Intent.
 * Android tiene aplicaciones por defe

Intents con parámetros

 * Es muy posible que queramos pasar/recuperar datos entre actividades
 * Por ejemplo que una activity me pase usuario y contraseña para validar

Pasar valores a través de un Intent

 * 1) Una vez creado el Intent, creamos un objeto Bundle
 * 2) A este objeto le asignamos valores en la forma de parejas etiqueta-valor usando métodos del tipo putxxx
 * 3) asociamos el objeto Bundle al Intent con el método putExtras( Bundle ) y ya tenemos los valores preaparados para que sean pasados a la activity o componente que active el Intent.

Leer los datos que pasa el intent

 * Para leer los datos en la activity invocada con el intent, se hace de manera sencilla
 * 1) Creamos un objeto budle
 * 2) Lo instanciamos con el bundle que nos retorna el método getExtras del intent que lo ha activado (con el método getIntent
 * 3) Lemos los valores con los métodos getXXX(etiqueta)

Devolver valores a una activity que me invocó
La activity A llama a la Activity B Para ello usamos el método
 * Ahora vamos a ver como es el proceso en el que la activity invocada retorna valores a la activity que la invocó
 * Situación
 * La activity A invoca a la activity B
 * La activity B retorna un valor a la activity A
 * Paso 1
 * En este caso pasamos un segundo parámetro que es un código que indentifica la invocación de la acción
 * Este código permitirá asegurarnos que retorno de esta activity y no de otra.
 * Supongamos que una activity pueda invocar a varias.
 * en el retorno de cualquiera de ellas si retorna valor, siempre iré al método 'onActivityResult(int resquest, int result, Intendt)
 * Analizando el parámetro request podemos ver de qué intent venimos (que será el mismo valor que le hayamos pasado en la invocación.

Devolviendo resultados
400px fichero manifest con dos activity Dos ficheros java dos ficheros de layout
 * Ahora queremos hacer un diseño como el siguiente
 * 1) Realizamos los diseños