View
1
Download
0
Category
Preview:
Citation preview
Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles
© 20112012 Depto. Ciencia de la Computación e IA
Plataforma Android
Sesión 2: Intents y navegación entre actividades
Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles
© 20112012 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
Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles
© 20112012 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
Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles
© 20112012 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);
Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles
© 20112012 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
Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles
© 20112012 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);
Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles
© 20112012 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
Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles
© 20112012 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);
Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles
© 20112012 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
Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles
© 20112012 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(); }});
Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles
© 20112012 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; }}
Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles
© 20112012 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 <intentfilter> 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>
Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles
© 20112012 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);
Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles
© 20112012 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)
Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles
© 20112012 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
Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles
© 20112012 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
Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles
© 20112012 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)
Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles
© 20112012 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
Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles
© 20112012 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
Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles
© 20112012 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
Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles
© 20112012 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
Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles
© 20112012 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
Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles
© 20112012 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
Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles
© 20112012 Depto. Ciencia de la Computación e IAPlataforma Android Intents y navegación 24
¿Preguntas...?
Recommended