Arquitectura de Aplicaciones - ua · Arquitectura de Aplicaciones Author: Aitor Medrano Created...

24
Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles © 2011-2012 Depto. Ciencia de la Computación e IA Plataforma Android Sesión 2: Intents y navegación entre actividades

Transcript of Arquitectura de Aplicaciones - ua · Arquitectura de Aplicaciones Author: Aitor Medrano Created...

Page 1: Arquitectura de Aplicaciones - ua · Arquitectura de Aplicaciones Author: Aitor Medrano Created Date: 1/11/2012 11:22:31 AM ...

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

© 2011­2012 Depto. Ciencia de la Computación e IA 

Plataforma Android

Sesión 2: Intents y navegación entre actividades

Page 2: Arquitectura de Aplicaciones - ua · Arquitectura de Aplicaciones Author: Aitor Medrano Created Date: 1/11/2012 11:22:31 AM ...

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

© 2011­2012 Depto. Ciencia de la Computación e IAPlataforma Android  Intents y navegación ­ 2

Puntos a tratar• Intents

• Introducción• Lanzar actividades

• Navegación• Tareas• launchmode e Intents• Afinidad entre tareas• Limpiando la pila de actividades

Page 3: Arquitectura de Aplicaciones - ua · Arquitectura de Aplicaciones Author: Aitor Medrano Created Date: 1/11/2012 11:22:31 AM ...

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

© 2011­2012 Depto. Ciencia de la Computación e IAPlataforma Android  Intents y navegación ­ 3

Intents• Elemento importante y característico en Android

• Intercambio de información• Lanzar nuevas actividades o servicios

• De manera explícita o implícita

• Ventajas• Desacoplamiento de componentes• Extender fácilmente la funcionalidad de las aplicaciones

Page 4: Arquitectura de Aplicaciones - ua · Arquitectura de Aplicaciones Author: Aitor Medrano Created Date: 1/11/2012 11:22:31 AM ...

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

© 2011­2012 Depto. Ciencia de la Computación e IAPlataforma Android  Intents y navegación ­ 4

Lanzando actividades con Intents• Intents explícitos. Parámetros

• Contexto de la actividad actual• El nombre de la clase de la actividad a lanzar

• Una actividad iniciada con startActivity no notificará su finalización• Método finish• Pulsación del botón BACK

Intent intent = new Intent(MiActividad.this, MiOtraActividad.class);startActivity(intent);

Page 5: Arquitectura de Aplicaciones - ua · Arquitectura de Aplicaciones Author: Aitor Medrano Created Date: 1/11/2012 11:22:31 AM ...

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

© 2011­2012 Depto. Ciencia de la Computación e IAPlataforma Android  Intents y navegación ­ 5

Lanzando actividades con Intents• Intents implícitos

• Se indica la tarea que se desea que se lleve a cabo• No se especifica quién lo hará• El propio sistema decide la actividad más adecuada en tiempo de 

ejecución• Si existen varias alternativas, se muestran en un menú• Las actividades nativas tienen la misma prioridad que el 

resto (pueden ser reemplazadas)• Posibilidad de usar actividades pertenecientes a otras 

aplicaciones• Ejemplo: aplicación con toma de fotografías

Page 6: Arquitectura de Aplicaciones - ua · Arquitectura de Aplicaciones Author: Aitor Medrano Created Date: 1/11/2012 11:22:31 AM ...

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

© 2011­2012 Depto. Ciencia de la Computación e IAPlataforma Android  Intents y navegación ­ 6

Lanzando actividades con Intents• El Intent implícito debe incluir:

• Identificador de la tarea a realizar• URI de los datos sobre los que realizar la tarea• Opcionalmente: datos extra (método putExtra)

Intent intent = new Intent(Intent.ACTION_DIAL, Uri.parse(“tel:666666666”);startActivity(intent);

Page 7: Arquitectura de Aplicaciones - ua · Arquitectura de Aplicaciones Author: Aitor Medrano Created Date: 1/11/2012 11:22:31 AM ...

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

© 2011­2012 Depto. Ciencia de la Computación e IAPlataforma Android  Intents y navegación ­ 7

Lanzando actividades con Intents• Algunos identificadores de acción:

• ACTION_ANSWER• ACTION_CALL• ACTION_DELETE• ACTION_DIAL• ACTION_EDIT• ACTION_INSERT• ACTION_PICK• ACTION_SEARCH• ACTION_SENDTO• ACTION_WEB_SEARCH• ACTION_VIEW

Page 8: Arquitectura de Aplicaciones - ua · Arquitectura de Aplicaciones Author: Aitor Medrano Created Date: 1/11/2012 11:22:31 AM ...

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

© 2011­2012 Depto. Ciencia de la Computación e IAPlataforma Android  Intents y navegación ­ 8

Subactividades• Actividades iniciadas con startActivityForResult• Producen el disparo de un evento en la actividad padre• Se puede devolver información a la actividad padre• startActivityForResult

• Funcionamiento similar a startActivity• Requiere código de petición: valor entero que identifica a la 

subtarea

private static final int CODIGO_ACTIVIDAD = 1;

Intent intent = new Intent(this, MiOtraActividad.class);startActivityForResult(intent, CODIGO_ACTIVIDAD);

Page 9: Arquitectura de Aplicaciones - ua · Arquitectura de Aplicaciones Author: Aitor Medrano Created Date: 1/11/2012 11:22:31 AM ...

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

© 2011­2012 Depto. Ciencia de la Computación e IAPlataforma Android  Intents y navegación ­ 9

Subactividades• Devolución de resultados

• Utilizar la función setResult antes de finish• Parámetros:

• Código de resultado: Activity.RESULT_OK, Activity.RESULT_CANCELED o un entero

• El propio resultado (un Intent)• Puede haber diferentes llamadas a setResult en una misma 

actividad• Si se destruye la actividad sin haber llamado a setResult se 

devuelve automáticamente Activity.RESULT_CANCELED 

Page 10: Arquitectura de Aplicaciones - ua · Arquitectura de Aplicaciones Author: Aitor Medrano Created Date: 1/11/2012 11:22:31 AM ...

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

© 2011­2012 Depto. Ciencia de la Computación e IAPlataforma Android  Intents y navegación ­ 10

Subactividades

botonOk.setOnClickListener(new View.onClickListener() { public void onClick(View view) { Uri dato = Uri.parse("content://contactos/" + id_contacto_seleccionado); Intent resultado = new Intent(null, dato); resultado.putExtra(DATOS_CORRECTOS, datosCorrectos); resultado.putExtra(TELEFONO_SELECCIONADO, telefonoSeleccionado); setResult(RESULT_OK, resultado); finish(); }}); botonCancelar.setOnClickListener(new View.OnClickListener() { public void onClick(View view) { setResult(RESULT_CANCELED, null); finish(); }});

Page 11: Arquitectura de Aplicaciones - ua · Arquitectura de Aplicaciones Author: Aitor Medrano Created Date: 1/11/2012 11:22:31 AM ...

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

© 2011­2012 Depto. Ciencia de la Computación e IAPlataforma Android  Intents y navegación ­ 11

Subactividades• Manejador del evento en la clase padreprivate static final int PRIMERA_ACTIVIDAD = 1; @Overridepublic void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); switch(requestCode) { case PRIMERA_ACTIVIDAD: if (resultCode == Activity.RESULT_OK) { Uri dato = data.getData(); boolean datosCorrectos = data.getBooleanExtra(DATOS_CORRECTOS, false); String telefono = data.getStringExtra(TELEFONO_SELECCIONADO); } break; }}

Page 12: Arquitectura de Aplicaciones - ua · Arquitectura de Aplicaciones Author: Aitor Medrano Created Date: 1/11/2012 11:22:31 AM ...

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

© 2011­2012 Depto. Ciencia de la Computación e IAPlataforma Android  Intents y navegación ­ 12

Respondiendo Intents implícitos• Intent Filter

• Medio para registrar actividades como capaces• De realizar una determinada tarea• Con unos datos concretos

• Elemento <intent­filter> en el Manifest de la aplicación:

<activity android:name=".MiActividad" android:label="Mi Actividad"> <intent-filter> <action android:name="es.ua.jtech.intent.action.HAZ_ALGO"/> <category android:name="android.intent.category.DEFAULT"/> <category android:name="android.intent.category.ALTERNATIVE_SELECTED"/> <data android:mimeType="vnd.miaplicacion.cursor.item/*"/> </intent-filter></activity>

Page 13: Arquitectura de Aplicaciones - ua · Arquitectura de Aplicaciones Author: Aitor Medrano Created Date: 1/11/2012 11:22:31 AM ...

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

© 2011­2012 Depto. Ciencia de la Computación e IAPlataforma Android  Intents y navegación ­ 13

Acceder a la información de un Intent• Dentro de onCreate: 

• Acceso a los datos del Intent:

Intent intent = getIntent();

String accion = intent.getAction();Uri datos = intent.getData();[TIPO] datoExtra = intent.get[TIPO]Extra(IDENTIFICADOR);

Page 14: Arquitectura de Aplicaciones - ua · Arquitectura de Aplicaciones Author: Aitor Medrano Created Date: 1/11/2012 11:22:31 AM ...

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

© 2011­2012 Depto. Ciencia de la Computación e IAPlataforma Android  Intents y navegación ­ 14

Navegación: tarea• Colección de actividades con un objetivo común• Se puede interpretar como una aplicación independiente• Cada una tiene su propia pila de actividades

• Cuando una actividad se destruye, se saca la primera de la pila• Cuando se inicia una nueva actividad, la activa pasa al tope de la 

pila• Conclusión: las actividades no se reordenan en la pila• Conclusión: puede haber más de una instancia de una 

actividad en la pila• Cuando la pila de actividades queda vacía, la tarea se destruye

• Sólo una tarea en primer plano; el resto mantienen sus actividades intactas (si no son necesarios más recursos)

Page 15: Arquitectura de Aplicaciones - ua · Arquitectura de Aplicaciones Author: Aitor Medrano Created Date: 1/11/2012 11:22:31 AM ...

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

© 2011­2012 Depto. Ciencia de la Computación e IAPlataforma Android  Intents y navegación ­ 15

Navegación: tarea• Ejemplo de más de una instancia de actividad por tarea

Page 16: Arquitectura de Aplicaciones - ua · Arquitectura de Aplicaciones Author: Aitor Medrano Created Date: 1/11/2012 11:22:31 AM ...

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

© 2011­2012 Depto. Ciencia de la Computación e IAPlataforma Android  Intents y navegación ­ 16

Navegación: tarea• Posibles modificaciones en el funcionamiento estándar 

del lanzamiento de actividades:• Sólo una instancia de una determinada actividad• Iniciar una actividad en una tarea independiente• Eliminar actividades de la pila

• ¿Cómo?• Atributo launchmode de <activity> en el Manifest de la aplicación• Flags en Intents

Page 17: Arquitectura de Aplicaciones - ua · Arquitectura de Aplicaciones Author: Aitor Medrano Created Date: 1/11/2012 11:22:31 AM ...

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

© 2011­2012 Depto. Ciencia de la Computación e IAPlataforma Android  Intents y navegación ­ 17

El atributo launchmode• Valores

• standard: comportamiento por defecto• singleTop: el Intent se envía a la instancia ya existente si está 

activa• singleTask: se crea una tarea y se añade a ella la nueva tarea (si 

ya existía una instancia en una tarea separada se le envía el Intent) 

Page 18: Arquitectura de Aplicaciones - ua · Arquitectura de Aplicaciones Author: Aitor Medrano Created Date: 1/11/2012 11:22:31 AM ...

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

© 2011­2012 Depto. Ciencia de la Computación e IAPlataforma Android  Intents y navegación ­ 18

El atributo launchmode• Valores:

• singleInstance: como el caso anterior, pero nunca se lanza una nueva actividad en la tarea recién creada

Page 19: Arquitectura de Aplicaciones - ua · Arquitectura de Aplicaciones Author: Aitor Medrano Created Date: 1/11/2012 11:22:31 AM ...

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

© 2011­2012 Depto. Ciencia de la Computación e IAPlataforma Android  Intents y navegación ­ 19

Flags para Intents al lanzar actividades• Valores:

• FLAG_ACTIVITY_NEW_TASK: equivalente a singleTask• FLAG_ACTIVITY_SINGLE_TOP: equivalente a singleTop• FLAG_ACTIVITY_CLEAR_TOP: si ya existe una instancia de la 

actividad se destruyen las que hay sobre ella en la pila• FLAG_ACTIVITY_REORDER_TO_FRONT: si ya existe una 

instancia de la actividad se lleva a primer plano• FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS: al lanzar la 

actividad en una nueva tarea, ésta no se muestra en el listado de tareas

• FLAG_ACTIVITY_FORWARD_RESULT

Page 20: Arquitectura de Aplicaciones - ua · Arquitectura de Aplicaciones Author: Aitor Medrano Created Date: 1/11/2012 11:22:31 AM ...

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

© 2011­2012 Depto. Ciencia de la Computación e IAPlataforma Android  Intents y navegación ­ 20

Flags para Intents al lanzar actividades• Valores

• FLAG_ACTIVITY_MULTIPLE_TASK: en conjunción con NEW_TASK, se crea siempre una nueva instancia en una nueva tarea

• FLAG_ACTIVITY_NO_ANIMATION: desactiva la animación de transición de una actividad a la siguiente

Page 21: Arquitectura de Aplicaciones - ua · Arquitectura de Aplicaciones Author: Aitor Medrano Created Date: 1/11/2012 11:22:31 AM ...

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

© 2011­2012 Depto. Ciencia de la Computación e IAPlataforma Android  Intents y navegación ­ 21

Afinidad entre actividades• Medio para indicar a qué tarea desea pertenecer una 

actividad• Por defecto todas las actividades de una aplicación tienen 

afinidad con el resto• Por defecto todas las actividades de una aplicación pertenecen a 

la misma tarea• Otras posibilidades:

• Actividades de una misma aplicación pertenecen a diferentes tareas

• Actividades de diferentes aplicaciones forman parte de una misma tarea

Page 22: Arquitectura de Aplicaciones - ua · Arquitectura de Aplicaciones Author: Aitor Medrano Created Date: 1/11/2012 11:22:31 AM ...

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

© 2011­2012 Depto. Ciencia de la Computación e IAPlataforma Android  Intents y navegación ­ 22

Afinidad entre actividades• Atributo taskAffinity del elemento <activity> del Manifest

• Valor: identificador en forma de cadena• Valor por defecto: nombre de paquete de la aplicación• Se tiene en cuenta cuando

• El Intent usa el flag FLAG_ACTIVITY_NEW_TASK• Cuando el atributo allowTaskReparenting de la actividad 

valga true

• Medio por el que se pueden distribuir varias aplicaciones en un único paquete .apk

Page 23: Arquitectura de Aplicaciones - ua · Arquitectura de Aplicaciones Author: Aitor Medrano Created Date: 1/11/2012 11:22:31 AM ...

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

© 2011­2012 Depto. Ciencia de la Computación e IAPlataforma Android  Intents y navegación ­ 23

Limpiar la pila de actividades• Comportamiento por defecto: la pila de actividades se 

vacía si la tarea está sen segundo plano mucho tiempo• Atributos de <activity> en el Manifest:

• alwaysRetainTaskState: se desactiva el comportamiento por defecto

• clearTaskOnLaunch: se eliminan todas las actividades de la tarea siempre que pase a segundo plano (lo contrario al anterior)

• finishTaskOnLaunch: equivalente al atributo anterior, pero para una actividad individual

• noHistory: la actividad es siempre destruida (y no se guarda en la pila) cuando pasa a segundo plano 

Page 24: Arquitectura de Aplicaciones - ua · Arquitectura de Aplicaciones Author: Aitor Medrano Created Date: 1/11/2012 11:22:31 AM ...

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

© 2011­2012 Depto. Ciencia de la Computación e IAPlataforma Android  Intents y navegación ­ 24

¿Preguntas...?