Diferencia entre revisiones de «Usuario:ManuelRomero/Android/Intents»
De WikiEducator
(→Usando un Intent) |
(→Intents con parámetros) |
||
Línea 82: | Línea 82: | ||
*Android tiene aplicaciones por defe | *Android tiene aplicaciones por defe | ||
− | =Intents con parámetros= | + | ==Intents con parámetros== |
*Es muy posible que queramos pasar/recuperar datos entre actividades | *Es muy posible que queramos pasar/recuperar datos entre actividades | ||
*Por ejemplo que una activity me pase usuario y contraseña para validar | *Por ejemplo que una activity me pase usuario y contraseña para validar | ||
+ | ===Pasar valores a través de un Intent=== | ||
+ | |||
+ | #Una vez creado el Intent, creamos un objeto Bundle | ||
+ | #A este objeto le asignamos valores en la forma de parejas etiqueta-valor usando métodos del tipo '''''putxxx''''' | ||
+ | asociamos el objeto Bundle al Intent con el método '''''getExtras()''''' y ya tenemos los valores preaparados para que sean pasados a la activity o componente que active el Intent. | ||
+ | <source lang=java> | ||
+ | //Primero defino el intent y le asocia una actividad que quiero que invoque. | ||
+ | Intent intencion = new Intent(); | ||
+ | intencion.getClass(this,miclase.class); | ||
+ | |||
+ | //Defino el bundle para asignar parejas variable-valor | ||
+ | Bundle datos = new Bundle(); | ||
+ | datos.putInt("edad",25); | ||
+ | datos.putString("nombre","pedro"); | ||
+ | |||
+ | //Asocio el bundle al intent | ||
+ | intencion.getExtras(datos); | ||
+ | |||
+ | //Activo la activity | ||
+ | startActivity(intencion); | ||
+ | </source> | ||
+ | |||
+ | ===Leer los datos que pasa el intent=== | ||
+ | |||
+ | ===Devolver valores a una activity que me invocó=== | ||
+ | |||
===Devolviendo resultados=== | ===Devolviendo resultados=== | ||
*Ahora queremos hacer un diseño como el siguiente | *Ahora queremos hacer un diseño como el siguiente |
Revisión de 10:03 10 ene 2014
Trabajo en proceso, espera cambios frecuentes. Tu ayuda y retroalimentación son bienvenidos. Ver página de charlas. |
#Se han detectado puntos incompletos en el contendio de este tema
En breve se actualizará, de momento no se recomienda su estudo . |
Intents
- Referencia
http://developer.android.com/reference/android/content/Intent.html
- 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
- Activity.
- Service.
- ContentProvider.
- 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 <intent-filter> 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 :
- component, es el componente de la aplicación que queremos que se ejecute.
- action, indica la acción asociada al Intent. con ella trataremos de encontrar los componetes que llevan a caba esa acción.
- data, son los datos necesarios para una determinada accion.
- category, forma de agrupar actividades que detallan conciones que pueden hacer
- extra, permite dar valores a un objeto Bundle en formato etiqueta-valor; Con ello podremos pasar valores al componentes que invoquemos.
- 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 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
Intent(Context packageContext, Class<?> cls)
/*Actividad 2 es una actividad del paquete*/ ... Intent i = new Intent(this, Actividad2.class); startActivity(i); ...
- Usando métodos de la clase Intent para establecer el componente que queremos invocar
getComponent(...), getClass(...) getClassName(...).
- Y para recuperar el nombre del componente
getComponent()
- Ejemplo
... Intent i = new Intent(); i.setClass(this,Actividad2.class); startActivity(i); ... /*Otra manera de hacer lo mismo*/ Intent i=new Intent(); i.setComponent(new ComponentName(this,Actividad2.class)); startActivity(i); /*Lo mismo usando el nombre del java*/ ... Intent i = new Intent(); i.setClassName(this, "com.example.interaccionactivitys.Actividad2"); startActivity(i); ...
- 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 <action-filter> 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
- Una vez creado el Intent, creamos un objeto Bundle
- A este objeto le asignamos valores en la forma de parejas etiqueta-valor usando métodos del tipo putxxx
asociamos el objeto Bundle al Intent con el método getExtras() y ya tenemos los valores preaparados para que sean pasados a la activity o componente que active el Intent.
//Primero defino el intent y le asocia una actividad que quiero que invoque. Intent intencion = new Intent(); intencion.getClass(this,miclase.class); //Defino el bundle para asignar parejas variable-valor Bundle datos = new Bundle(); datos.putInt("edad",25); datos.putString("nombre","pedro"); //Asocio el bundle al intent intencion.getExtras(datos); //Activo la activity startActivity(intencion);
Leer los datos que pasa el intent
Devolver valores a una activity que me invocó
Devolviendo resultados
- Ahora queremos hacer un diseño como el siguiente
- Realizamos los diseños
fichero manifest con dos activity Dos ficheros java dos ficheros de layout
Los ficheros java
public void validarUsuario(View v){ Intent datosUsuario = new Intent(); EditText tNombre= (EditText) findViewById(R.id.Nombre); EditText tApellido= (EditText) findViewById(R.id.Apellido); //Obtenemos el valor de la caja de texto //Utilizamos putExtra() para obtener los pares nombre/valor datosUsuario.putExtra("nombre", tNombre.getText().toString()); datosUsuario.putExtra("apellido", tApellido.getText().toString()); //Utilizamos el método setData() para devover algunos valores datosUsuario.setData(Uri.parse("Enviando valores")); //Establecemos el resultado con OK setResult(RESULT_OK,datosUsuario); //Destruimos el objeto finish(); //iniciamos actividad datosUsuario.setClass(this, ValidacionDatos.class); startActivityForResult(datosUsuario,1); } public void onActivityResult (int codigoRespuesta, int codigoResultado, Intent datos){ if (codigoRespuesta==1){ if (codigoResultado == RESULT_OK){ Toast.makeText(this, "no no se se", Toast.LENGTH_LONG); } } }
public class ValidacionDatos extends Activity { public void onCreate(Bundle estadoActividad){ super.onCreate(estadoActividad); setContentView(R.layout.activity_validacion_datos); //Obtener los datos pasados usand getStringExtra() Toast.makeText(this,getIntent().getStringExtra("nombre"),Toast.LENGTH_LONG).show(); //Obtener los datos pasados usand getStringExtra() Toast.makeText(this,getIntent().getStringExtra("apellido"),Toast.LENGTH_LONG).show(); //Obetener el objeto Bundle pasado //Bundle nose=getIntent().getExtras(); //Obtener los datos pasados usand getStringExtra() //Toast.makeText(this,nose.getString("nombre"),Toast.LENGTH_LONG).show(); //Obtener los datos pasados usand getStringExtra() //Toast.makeText(this,nose.getString("apellido"),Toast.LENGTH_LONG).show(); } public void clickValidacion(View v) { Toast.makeText(this,"Valicación terminada",Toast.LENGTH_LONG).show(); finish(); } }