Tema 4.6 Intenciones

47
Análisis y Diseño de Software Departamento de Ingeniería de Sistemas Telemáticos http://moodle.dit.upm.es Intenciones Actividades que se comunican Carlos A. Iglesias <[email protected]>

Transcript of Tema 4.6 Intenciones

Page 1: Tema 4.6 Intenciones

Análisis y Diseño de Software

Departamento de Ingeniería de Sistemas Telemáticoshttp://moodle.dit.upm.es

IntencionesActividades que se comunican

Carlos A. Iglesias <[email protected]>

Page 2: Tema 4.6 Intenciones

Intenciones 2

Temario● 4.1 Introducción a Android ● 4.2 Introducción Desarrollo con Android

● 4.3 Ejemplo Desarrollo y Depuración ● 4.4 Actividades● 4.5 Interfaces de Usuario

● 4.6 Intenciones● 4.7 Acceso a Datos● 4.8 Preferencias● 4.9 Hebras e internacionalización

Page 3: Tema 4.6 Intenciones

Intenciones 3

Teoría

Ejercicio práctico en el ordenador

Ampliación de conocimientos

Lectura / Vídeo / Podcast

Práctica libre / Experimentación

Leyenda

Page 4: Tema 4.6 Intenciones

Intenciones 4

● Android Developers

Bibliografía

http://developer.android.com/training/basics/intents/index.html

Page 5: Tema 4.6 Intenciones

Intenciones 5

Objetivos

● Aprender a hacer aplicaciones con más de una pantalla

● Entender cómo funciona el mecanismo de Intenciones en Android

Page 6: Tema 4.6 Intenciones

Intenciones 6

Intenciones

● Una aplicación en Android normalmente tiene varias actividades

● Para pasar el control de una actividad a otra usamos Intenciones (Intent)

● Las actividades se comunican entre sí de forma asíncrona e indirecta

Page 7: Tema 4.6 Intenciones

Intenciones 7

Tipos de intenciones

● Explícita: indicamos el componente (clase exacta) que va a ejecutar la intención

● Implícita: el sistema determina (resuelve) qué componente debe procesar al intención.– Si hay más de una aplicación que puede

realizar esa intención, el usuario puede seleccionar cuál usar

Page 8: Tema 4.6 Intenciones

Intenciones 8

Creando una intención implícita

● Las intenciones implícitas se construyen indicando– Acción: acción que queremos ejecutar,

predefinida (ACTION_VIEW, ACTION_DIAL, …) o creada por el usuario.

– Datos: datos sobre los que opera la acción expresados como una URI (número de teléfono, contacto, ...)

Page 9: Tema 4.6 Intenciones

Intenciones 9

Ej. Intención implícita predefinida

● Llamar por teléfono

●Abrir una página web

http://developer.android.com/guide/appendix/g-app-intents.html

Page 10: Tema 4.6 Intenciones

Intenciones 10

Intenciones explícitas

● Indicamos de que actividad (this) a qué actividad queremos ir

● Podemos pasar datos con putExtra()– En la actividad que recibe la Intent, los

recupera con getExtras().getString(“clave”) (o getBoolean(), getInt()... mirar api de Bundle).

Page 11: Tema 4.6 Intenciones

Intenciones 11

Actividades e Intenciones

Actividad Main

Sub-Actividad 1

Sub-actividad 2

Intent Result Intent

Aplicación Android

Page 12: Tema 4.6 Intenciones

Intenciones 12

Ejemplo pares acción / datos

● ACTION_VIEW content://contacts/people/1 – muestra información sobre la persona con id 1

● ACTION_DIAL content://contacts/people/1 – muestra el teléfono con el número marcado de la persona con id 1

● ACTION_VIEW (o ACTION_DIAL) tel:134 – muestra el teléfono con el número 134 marcado

● ACTION_EDIT content://contacts/people/1 – edita la información del contacto con id 1

● ACTION_VIEW content://contacts/people – muestra una lista de contactos

Page 13: Tema 4.6 Intenciones

Intenciones 13

Parámetros adicionales

● Además de los parámetros principales, podemos detallar más – Type: MIME type, normalmente se pone bien

solo.– Extras: añadir más datos para una acción.

P.ej. Para email (subject, body, …)

Page 14: Tema 4.6 Intenciones

Intenciones 14

Acciones estándar para Intenciones

● ACTION_MAIN● ACTION_VIEW● ACTION_ATTACH_DATA● ACTION_EDIT● ACTION_PICK● ACTION_CHOOSER● ACTION_GET_CONTENT● ACTION_DIAL● ACTION_CALL● ACTION_SEND● ANCTION_SENDTO

● ACTION_ANSWER● ACTION_INSERT● ACTION_DELETE● ACTION_RUN● ACTION_SYNC● ACTION_PICK_ACTIVITY● ACTION_SEARCH● ACTION_WEB_SEARCH● ACTION_FACTORY_TEST

http://developer.android.com/reference/android/content/Intent.html

Page 15: Tema 4.6 Intenciones

Intenciones 15

Verificar intenciones implícitas

● En las intenciones implícitas, podemos comprobar si algún componente va a responder a la intención

● P.ej. En nuestro teléfono no hay una característica

Page 16: Tema 4.6 Intenciones

Intenciones 16

Ej. mapas comprobando si es seguro

Page 17: Tema 4.6 Intenciones

Intenciones 17

Selección de aplicación por el usuario

● Cuando hay varias aplicaciones que pueden realizar una intención, el usuario puede escoger una por defecto

● En otras ocasiones, queremos que escoja cada vez, se utiliza un 'chooser'

Page 18: Tema 4.6 Intenciones

Intenciones 18

Ej. chooser

Page 19: Tema 4.6 Intenciones

Intenciones 19

Formas de pasar el control

Page 20: Tema 4.6 Intenciones

Intenciones 20

Invocar una intención

● startActivity(intent) → lanza una actividad● sendBroadcast(intent) → envía una intención a todos

los componentes BroadcastReceiver● startActivityForResult(intent, requestCode) →

– lanza una actividad, que devuelve un resultado con setResult(resultCode), predefinidos: RESULT_OK o RESULT_CANCELED, o bien personalizados comenzando en RESULT_FIRST_USER.• Para volver a la actividad anterior llamamos a finish() para

terminar la actividad

– La actividad recibe el resultado en el método de callback onActivityResult(requestCode,resultCode,intent)

Page 21: Tema 4.6 Intenciones

Intenciones 21

Obtener un resultado

Page 22: Tema 4.6 Intenciones

Intenciones 22

onActivityResult()

Page 23: Tema 4.6 Intenciones

Intenciones 23

Filtros de intenciones (I)

● Si queremos que una actividad nuestra pueda ser lanzada por otra actividad de otra aplicación, debemos indicar un 'intent-filter' en el manifiesto. Declaramos– Action – nombre de la acción que realizamos.

Normalmente uno predefinido como ACTION_SEND (para compartir) o ACTION_VIEW

– Data – descripción de los datos asociados: tipo mime (text/plain) o prefijo URI (htt) o una combinación

– Categoría: gesto o sitio desde puede ser llamado, normalmente CATEGORY_DEFAULT

Page 24: Tema 4.6 Intenciones

Intenciones 24

Filtros de Intenciones (II)

Page 25: Tema 4.6 Intenciones

Intenciones 25

Varios filtros

● Determinamos qué tipo de intención nos llamó si tenemos varios filtros

Page 26: Tema 4.6 Intenciones

Intenciones 26

Devolver resultado

● Indicamos resultado con setResult() y finish()...

●Y así vuelve a la actividad que le llamó

Page 27: Tema 4.6 Intenciones

Intenciones 27

Ejemplo. Activar Acciones estándar

●Vamos a hacer un ejemplo– Llamar a

intenciones estándar

– Lanzar otras actividades

Page 28: Tema 4.6 Intenciones

Intenciones 28

Crear Lista Opciones

ListView para ver una lista@android:id/list → layout

de Android para listas

@android:id/empty → si la lista está vacía

Page 29: Tema 4.6 Intenciones

Intenciones 29

Crear Lista opciones

Page 30: Tema 4.6 Intenciones

Intenciones 30

¡Lanzamos!

Page 31: Tema 4.6 Intenciones

Intenciones 31

Vamos a usar Intenciones

Page 32: Tema 4.6 Intenciones

Intenciones 32

Acción estándar: llamar

Page 33: Tema 4.6 Intenciones

Intenciones 33

Acción estándar: listar contactos

Hay que crearlos

en el emulador

Page 34: Tema 4.6 Intenciones

Intenciones 34

Acción estándar: editar/ver contacto

Page 35: Tema 4.6 Intenciones

Intenciones 35

Acción estándar: ver web

Page 36: Tema 4.6 Intenciones

Intenciones 36

Acción estándar: mandar correo

Page 37: Tema 4.6 Intenciones

Intenciones 37

Acción estándar: compartir

Page 38: Tema 4.6 Intenciones

Intenciones 38

Emulador vs real

No encuentra actividad que mande correo

Sí va en el teléfono

Page 39: Tema 4.6 Intenciones

Intenciones 39

Seleccionar un contacto

● En este caso llamo a una actividad– Me devuelve un resultado

● Con el resultado llamo a otra actividad● Para esto, uso

– startActivityForResult()– onActivityResult()

Page 40: Tema 4.6 Intenciones

Intenciones 40

Seleccionar un contacto

Page 41: Tema 4.6 Intenciones

Intenciones 41

Seleccionar un contacto

Necesario para el código anterior

Page 42: Tema 4.6 Intenciones

Intenciones 42

Pasar datos entre Actividades

● Tipos primitivos– Pasarlo en el Intent (con putExtra)– Si tiene que persistir, usar Preferencias

● Objetos no persistentes– Usar una clase Singleton– Las actividades extienden la clase android.app.Application y

recuperan los campos con getApplicationContext()

● Objetos persistentes: – Preferencias, Base de Datos, Proveedores de Contenidos,

Ficheros

http://developer.android.com/guide/faq/framework.html

Page 43: Tema 4.6 Intenciones

Intenciones 43

Ejemplo ListaCompra. Editar

Page 44: Tema 4.6 Intenciones

Intenciones 44

Ejemplo ListaCompra. Añadir

Page 45: Tema 4.6 Intenciones

Intenciones 45

Ejemplo

● Inspeccionar...– ¿Cómo guardamos

los productos?– ¿Cómo se

comunican las actividades?

– ¿Cómo hacemos el menú?

Page 46: Tema 4.6 Intenciones

Intenciones 46

Resumen

● En este tema hemos aprendido a– Definir preferencias de usuario, y usarlas en un

programa– Qué son las intenciones, y comunicar

actividades mediante ellas– Algunas acciones estándar para lanzar

actividades

Page 47: Tema 4.6 Intenciones

Intenciones 47

¿Preguntas?