Tema 4 4_1_intenciones_servicios

63
Análisis y Diseño de Software Departamento de Ingeniería de Sistemas Telemáticos http://moodle.dit.upm.es Tema 4.4 Intenciones y Servicios Preferencias e Intenciones Carlos A. Iglesias <[email protected]>

description

Tema 4.4.1 Intenciones y Servicios

Transcript of Tema 4 4_1_intenciones_servicios

Page 1: Tema 4 4_1_intenciones_servicios

Análisis y Diseño de Software

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

Tema 4.4Intenciones y ServiciosPreferencias e Intenciones

Carlos A. Iglesias <[email protected]>

Page 2: Tema 4 4_1_intenciones_servicios

Intenciones y Servicios 2

Teoría

Ejercicio práctico en el ordenador

Ampliación de conocimientos

Lectura / Vídeo / Podcast

Práctica libre / Experimentación

Leyenda

Page 3: Tema 4 4_1_intenciones_servicios

Intenciones y Servicios 3

Temario

● 4.1 Introducción a Android [Gar10, cap1-2 ]

● 4.2 Desarrollo con Android [Gar10, cap3-5]

● 4.3 Interfaces de Usuario [Gar10, cap6]

● 4.4 Intenciones y Servicios [Gar10, cap7-8]

– 4.4.1 Preferencias, Sistema de Ficheros, Menú de Opciones e Intenciones (cap 7)

– 4.4.2 Servicios (cap 8)● 4.5 Acceso a Datos [Gar10, cap9]

Page 4: Tema 4 4_1_intenciones_servicios

Intenciones y Servicios 4

Bibliografía

● Libro de texto: – [Gar10] Learning Android, Marko Gargenta,

O'Reilly, 2010, Cap 7-8. Disponible en http://ofps.oreilly.com/titles/9781449390501/

● Android Developers– http://developer.android.com/guide/topics/fundamentals.html

– http://developer.android.com/guide/topics/ui/index.html

Page 5: Tema 4 4_1_intenciones_servicios

Intenciones y Servicios 5

Objetivos

● Aprender a hacer aplicaciones que tienen configuración de los usuarios

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

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

Page 6: Tema 4 4_1_intenciones_servicios

Intenciones y Servicios 6

Motivación

● En nuestra práctica, tenemos que 'hardcodear” / poner a fuego el usuario y la contraseña

● Sería deseable que si la distribuimos los usuarios pueden configurar esto

Page 7: Tema 4 4_1_intenciones_servicios

Intenciones y Servicios 7

Preferencias● Las preferencias permiten que el usuario pueda dar valor a

propiedades● Son pares clave-valor, con tipos básicos int, boolean y String● El proceso será

1. Crear un recurso preferencias: prefs.xml

2. Implementar una actividad, PrefsActivity.java, que 'insufle' el fichero prefs.xml

3. Registrar la actividad en el manifiesto

4. Hacer que la aplicación lance esta actividad. Vamos a usar un menú de opciones, que es la opción estándar.

1. Crear recurso menu.xml

2. Actualizar la actividad StatusActivity para que insufle el menú y lance la actividad

Page 8: Tema 4 4_1_intenciones_servicios

Intenciones y Servicios 8

Recurso prefs.xml

● Proyecto o fichero New->Android XML File

Page 9: Tema 4 4_1_intenciones_servicios

Intenciones y Servicios 9

Prefs.xml (II)

● Añadimos elementos

Page 10: Tema 4 4_1_intenciones_servicios

Intenciones y Servicios 10

Prefs.xml (III)

Page 11: Tema 4 4_1_intenciones_servicios

Intenciones y Servicios 11

Prefs (IV)

Nombre variable

Texto para el usuario

Ayuda para que lo rellene

Page 12: Tema 4 4_1_intenciones_servicios

Intenciones y Servicios 12

Prefx.xml – Vista xml

Además de EditTextPreference (un valor), podemos poner CheckBoxPreference (escoger un valor de varios) o ListPreference (), RingTonePreference(), ...

Page 13: Tema 4 4_1_intenciones_servicios

Intenciones y Servicios 13

Actividad PrefsActivity

En vez de setContentView()

Page 14: Tema 4 4_1_intenciones_servicios

Intenciones y Servicios 14

Actualizamos Manifiesto

Page 15: Tema 4 4_1_intenciones_servicios

Intenciones y Servicios 15

Versión actual de res/values/strings.xml

Page 16: Tema 4 4_1_intenciones_servicios

Intenciones y Servicios 16

Activando la Actividad con un menú (I)

● Creamos un recurso menu.xml

Page 17: Tema 4 4_1_intenciones_servicios

Intenciones y Servicios 17

Menú Android (II)

Page 18: Tema 4 4_1_intenciones_servicios

Intenciones y Servicios 18

Menú Android (III)

Page 19: Tema 4 4_1_intenciones_servicios

Intenciones y Servicios 19

Menú Android (IV)

Aquí sí completa icono

Page 20: Tema 4 4_1_intenciones_servicios

Intenciones y Servicios 20

Recursos del Sistema en Android

● El icono lo hemos tomado de @android:drawable/ic_menu_preferences

● Android nos ofrece recursos– Están en android-sdk/platforms/android-

<version>/data/res/– P.ej. Android-sdk-linux/platforms/android-15/data/res

● Podemos acceder a ellos:– Desde Java: android.R (en vez de R)– Desde XML: @android:drawable (en vez de @drawable)

Page 21: Tema 4 4_1_intenciones_servicios

Intenciones y Servicios 21

Lanzando el menú

● La actividad debe crear el menú a partir de menu.xml

● El proceso es– Cuando el usuario pinche en 'menú' del teléfono,

Android llama a onCreateOptionsMenu(Menu menu) de la actividad. Se lee el XML y se mantiene el menú en memoria hasta que se destruye la actividad

– Cuando el usuario pincha en una opción, se llama a onOptionsItemSelected(MenuItem item)

Page 22: Tema 4 4_1_intenciones_servicios

Intenciones y Servicios 22

StatusActivity

Crea un objeto Java para 'insuflar

menu.xml'

Muestra menú

Consumo el evento

Según la opción del menú, hacemos algo. Ahora sólo hay una

opción

Lanzamos una Intención que lanza

una actividad

Page 23: Tema 4 4_1_intenciones_servicios

Intenciones y Servicios 23

Lanzando la aplicación (I)

Page 24: Tema 4 4_1_intenciones_servicios

Intenciones y Servicios 24

Lanzando la aplicación (II)

Page 25: Tema 4 4_1_intenciones_servicios

Intenciones y Servicios 25

SharedPreferences

● Para acceder a las preferencias desde Java, se utiliza la clase SharedPreferences

● Debemos– Declarar un objeto preferencias– Inicializarlo– Escuchar posibles cambios de las

preferencias, e inicializar el objeto Twitter

Page 26: Tema 4 4_1_intenciones_servicios

Intenciones y Servicios 26

StatusActivity (I)(versión actual)

Page 27: Tema 4 4_1_intenciones_servicios

Intenciones y Servicios 27

StatusActivity (II)

Page 28: Tema 4 4_1_intenciones_servicios

Intenciones y Servicios 28

StatusActivity (III)

Page 29: Tema 4 4_1_intenciones_servicios

Intenciones y Servicios 29

StatusActivity (IV)

Page 30: Tema 4 4_1_intenciones_servicios

Intenciones y Servicios 30

StatusActivity (V)

- Implementa la interfaz OnSharedPreferenceChangeListener

- Invalidamos el objeto twitter, y se recreará cuando vuelva a hacer falta

(inicialización vaga, lazy)

Propiedad y Valor por defecto

Page 31: Tema 4 4_1_intenciones_servicios

Intenciones y Servicios 31

StatusActivity (VI)

Cambiamos twitter por getTwitter()

Page 32: Tema 4 4_1_intenciones_servicios

Intenciones y Servicios 32

El sistema de ficheros

● Podemos navegar por el sistema de ficheros del dispositivo: Open Perspective → DDMS → File Explorer

Page 33: Tema 4 4_1_intenciones_servicios

Intenciones y Servicios 33

Sistema de ficheros

Page 34: Tema 4 4_1_intenciones_servicios

Intenciones y Servicios 34

Particiones del sistema de ficheros

● Hay tres particiones del sistema de ficheros. En el emulador están en ~/.android/avd/. – /system/ – sistema operativo android– /mnt/sdcard/ – almacenamiento de ficheros, música, etc. Se guarda en

~/.android/avd/ para cada dispositivo virtual. Se corresponde con la tarjeta SD en un dispositivo real.

– /data/ – datos de usuario. Almacena aplicaciones (/data/app/) y datos de las mismas (/data/data/). En este directorio hay un subdirectorio por aplicación, con los permisos de esa aplicación (un usuario en linux). En el emulador, somos superusuarios (root) y tenemos acceso a todo.

Page 35: Tema 4 4_1_intenciones_servicios

Intenciones y Servicios 35

Intenciones (Intention)

● Cuando el usuario seleccionaba una opción del menú, creábamos una intención

● Vamos a ver– Qué son las intenciones – Para qué valen– Cómo se usan

Page 36: Tema 4 4_1_intenciones_servicios

Intenciones y Servicios 36

Actividades e Intenciones● En Android una Aplicación contiene un conjunto de

Actividades● Cada Actividad:

– Debe fijar su interfaz con setContentView()– Es independiente del resto de actividades, pero puede cooperar

con ellas– Una actividad es la actividad principal, que es la que se activa

al lanzarse (fijado en AndroidManifest.xml)– Las actividades se comunican entre sí de una forma indirecta y

asíncrona– Para cambiar de actividad, una actividad debe ejecutar una

intención

Page 37: Tema 4 4_1_intenciones_servicios

Intenciones y Servicios 37

Actividades e Intenciones

Actividad Main

Sub-Actividad 1

Sub-actividad 2

Intent Result Intent

Aplicación Android

Page 38: Tema 4 4_1_intenciones_servicios

Intenciones y Servicios 38

Invocar una intención

● startActivity(intent) → lanza una actividad

● sendBroadcast(intent) → envía una intención a todos los componentes BroadcastReceiver

● startService(intent) o bindService(intent, …) → se comunica con un servicio de fondo

Page 39: Tema 4 4_1_intenciones_servicios

Intenciones y Servicios 39

Parámetros de las Intenciones

● 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, ...)

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

http://developer.android.com/guide/topics/intents/intents-filters.html

Page 40: Tema 4 4_1_intenciones_servicios

Intenciones y Servicios 40

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 41: Tema 4 4_1_intenciones_servicios

Intenciones y Servicios 41

Parámetros adicionales● Además de los parámetros principales, podemos

detallar más

● Category: información adicional de la acción. P. ej. CATEGORY_LAUNCHER indica que debe aparecer en el lanzador como una aplicación principal

● Type: MIME type, normalmente se pone bien solo.

● Component: fijamos qué clase queremos que procese la intención

● Extras: añadir más datos para una acción. P.ej. Para email (subject, body, …).

Page 42: Tema 4 4_1_intenciones_servicios

Intenciones y Servicios 42

Resolución 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. Para esto– Las actividades de las aplicaciones registran

qué intenciones saben responder en el manifiesto en la sección <intent-filter>, donde indican acción, categoría y datos

Page 43: Tema 4 4_1_intenciones_servicios

Intenciones y Servicios 43

Ej. Block de notas (I)

http://developer.android.com/resources/samples/NotePad/index.htmlhttp://developer.android.com/reference/android/content/Intent.html

Page 44: Tema 4 4_1_intenciones_servicios

Intenciones y Servicios 44

Ej. Filtros de NotesList (II)

● Indica que es una actividad ppal, y se lanza cuando lanzas la aplicación (MAIN) y que se lista en el lanzador de aplicaciones (LAUNCHER)

Page 45: Tema 4 4_1_intenciones_servicios

Intenciones y Servicios 45

Ej. Filtros de NotesList (III)

● Indica que podemos editar (EDIT), ver (VIEW) y escoger un valor (PICK) de una nota (vnd.android.cursor.dit/vnd.google.note). Pone una categoría por defecto (DEFAULT) porque es obligatorio para poder usar startActivity.

Page 46: Tema 4 4_1_intenciones_servicios

Intenciones y Servicios 46

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 47: Tema 4 4_1_intenciones_servicios

Intenciones y Servicios 47

Ejemplo. Activar Acciones estándar

●Vamos a hacer un ejemplo– Llamar a

intenciones estándar

– Lanzar otras actividades

Page 48: Tema 4 4_1_intenciones_servicios

Intenciones y Servicios 48

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 49: Tema 4 4_1_intenciones_servicios

Intenciones y Servicios 49

Crear Lista opciones

ListActivity en vez de Activity

Fuente de datos

Adaptador de lista, simple_list_item_1

está predefinido

Listener de la selección

Page 50: Tema 4 4_1_intenciones_servicios

Intenciones y Servicios 50

¡Lanzamos!

Page 51: Tema 4 4_1_intenciones_servicios

Intenciones y Servicios 51

Vamos a usar Intenciones

Page 52: Tema 4 4_1_intenciones_servicios

Intenciones y Servicios 52

Acción estándar: llamar

Page 53: Tema 4 4_1_intenciones_servicios

Intenciones y Servicios 53

Acción estándar: listar contactos

Hay que crearlos

en el emulador

Page 54: Tema 4 4_1_intenciones_servicios

Intenciones y Servicios 54

Acción estándar: editar/ver contacto

Page 55: Tema 4 4_1_intenciones_servicios

Intenciones y Servicios 55

Acción estándar: ver web

Page 56: Tema 4 4_1_intenciones_servicios

Intenciones y Servicios 56

Acción estándar: mandar correo

Page 57: Tema 4 4_1_intenciones_servicios

Intenciones y Servicios 57

Emulador vs real

No encuentra actividad que mande correo

Sí va en el teléfono

Page 58: Tema 4 4_1_intenciones_servicios

Intenciones y Servicios 58

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 59: Tema 4 4_1_intenciones_servicios

Intenciones y Servicios 59

Seleccionar un contacto

Page 60: Tema 4 4_1_intenciones_servicios

Intenciones y Servicios 60

Seleccionar un contacto

Necesario para el código anterior

Page 61: Tema 4 4_1_intenciones_servicios

Intenciones y Servicios 61

Lo que llevamos hecho...

Page 62: Tema 4 4_1_intenciones_servicios

Intenciones y Servicios 62

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 63: Tema 4 4_1_intenciones_servicios

Intenciones y Servicios 63

¿Preguntas?