• No se han encontrado resultados

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles. Plataforma Android

N/A
N/A
Protected

Academic year: 2021

Share "Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles. Plataforma Android"

Copied!
24
0
0

Texto completo

(1)

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

Plataforma Android

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

(2)

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

Puntos a tratar

Intents

Introducción

Lanzar actividades

Navegación

Tareas

launchmode e Intents

Afinidad entre tareas

Limpiando la pila de actividades

(3)

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

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

(4)

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

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);

(5)

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

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

(6)

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

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);

(7)

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

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

(8)

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

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);

(9)

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

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 

(10)

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

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();

(11)

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

Subactividades

Manejador del evento en la clase padre

private static final int PRIMERA_ACTIVIDAD = 1;

@Override

public 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;

(12)

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

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>

(13)

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

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);

(14)

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

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 

(15)

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

Navegación: tarea

Ejemplo de más de una instancia de actividad por tarea

(16)

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

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

(17)

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

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)  

(18)

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

El atributo launchmode

Valores:

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

(19)

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

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

(20)

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

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

(21)

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

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

(22)

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

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

(23)

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

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 

(24)

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

¿Preguntas...?

Referencias

Documento similar

Regresa el valor de la variable thread-limit-var, que es el n´ umero m´ aximo de hilos OpenMP disponibles para el programa.. void omp set max active levels(int

El Curso Universitario en Gestión de Datos en Dispositivos Android garantiza, además de la capacitación más rigurosa y actualizada, el acceso a un título de Curso

Además de esto, teniendo en cuenta que una de las funcionalidades más importantes de la aplicación, es el reproductor de contenido multimedia, se va a realizar

[4] TechTarget, “Mobile endpoint security: What enterprise infosec pros must know now.”

Comments: This is the standard method for locating very faint objects, which are difficult or impossible to see on the acquisition TV or detector. Accurate positions for a brightish

Int. Fernandez, “Simulation and design of a three-stage metal hydride hydrogen compressor based on experimental thermodynamic data,” Int. Sandrock, “Hydrogen-metal systems,”

En este trabajo se detalla la creación de una plataforma de adquisición de datos de usuarios reales para el modelado de la interacción hombre-máquina en dispositivos móviles..

Tras el estudio de la plataforma y entorno de desarrollo Android as´ı como el funciona- miento y estructura del est´ andar SCORM o las aplicaciones educativas para ejecutar