Tema 4 4_1_intenciones_servicios

Post on 13-Jun-2015

868 views 0 download

description

Tema 4.4.1 Intenciones y Servicios

Transcript of 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 <cif@gsi.dit.upm.es>

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

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]

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

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

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

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

Intenciones y Servicios 8

Recurso prefs.xml

● Proyecto o fichero New->Android XML File

Intenciones y Servicios 9

Prefs.xml (II)

● Añadimos elementos

Intenciones y Servicios 10

Prefs.xml (III)

Intenciones y Servicios 11

Prefs (IV)

Nombre variable

Texto para el usuario

Ayuda para que lo rellene

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

Intenciones y Servicios 13

Actividad PrefsActivity

En vez de setContentView()

Intenciones y Servicios 14

Actualizamos Manifiesto

Intenciones y Servicios 15

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

Intenciones y Servicios 16

Activando la Actividad con un menú (I)

● Creamos un recurso menu.xml

Intenciones y Servicios 17

Menú Android (II)

Intenciones y Servicios 18

Menú Android (III)

Intenciones y Servicios 19

Menú Android (IV)

Aquí sí completa icono

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)

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)

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

Intenciones y Servicios 23

Lanzando la aplicación (I)

Intenciones y Servicios 24

Lanzando la aplicación (II)

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

Intenciones y Servicios 26

StatusActivity (I)(versión actual)

Intenciones y Servicios 27

StatusActivity (II)

Intenciones y Servicios 28

StatusActivity (III)

Intenciones y Servicios 29

StatusActivity (IV)

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

Intenciones y Servicios 31

StatusActivity (VI)

Cambiamos twitter por getTwitter()

Intenciones y Servicios 32

El sistema de ficheros

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

Intenciones y Servicios 33

Sistema de ficheros

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.

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

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

Intenciones y Servicios 37

Actividades e Intenciones

Actividad Main

Sub-Actividad 1

Sub-actividad 2

Intent Result Intent

Aplicación Android

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

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

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

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

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

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

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)

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.

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

Intenciones y Servicios 47

Ejemplo. Activar Acciones estándar

●Vamos a hacer un ejemplo– Llamar a

intenciones estándar

– Lanzar otras actividades

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

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

Intenciones y Servicios 50

¡Lanzamos!

Intenciones y Servicios 51

Vamos a usar Intenciones

Intenciones y Servicios 52

Acción estándar: llamar

Intenciones y Servicios 53

Acción estándar: listar contactos

Hay que crearlos

en el emulador

Intenciones y Servicios 54

Acción estándar: editar/ver contacto

Intenciones y Servicios 55

Acción estándar: ver web

Intenciones y Servicios 56

Acción estándar: mandar correo

Intenciones y Servicios 57

Emulador vs real

No encuentra actividad que mande correo

Sí va en el teléfono

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

Intenciones y Servicios 59

Seleccionar un contacto

Intenciones y Servicios 60

Seleccionar un contacto

Necesario para el código anterior

Intenciones y Servicios 61

Lo que llevamos hecho...

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

Intenciones y Servicios 63

¿Preguntas?