1. Análisis y Diseño
de Software
Tema 4.4
Intenciones y Servicios
Preferencias e Intenciones
Carlos A. Iglesias <cif@gsi.dit.upm.es>
Departamento de Ingeniería de Sistemas Telemáticos
http://moodle.dit.upm.es
2. Leyenda
Teoría
Ejercicio práctico en el ordenador
Ampliación de conocimientos
Lectura / Vídeo / Podcast
Práctica libre / Experimentación
Intenciones y Servicios 2
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 3
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 4
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 5
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 6
7. Preferencias
● Laspreferencias 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 7
8. Recurso prefs.xml
● Proyecto o fichero New->Android XML File
Intenciones y Servicios 8
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 12
20. Recursos del Sistema en
Android
● Elicono 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 20
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 21
22. StatusActivity
Crea un objeto Java
para 'insuflar
menu.xml'
Muestra menú
Según la opción del
menú, hacemos algo.
Ahora sólo hay una
opción
Lanzamos una
Intención que lanza
una actividad
Consumo el evento
Intenciones y Servicios 22
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 25
30. StatusActivity (V)
Propiedad y Valor por
defecto
- Implementa la interfaz
OnSharedPreferenceChangeListener
- Invalidamos el objeto twitter, y se
recreará cuando vuelva a hacer falta
(inicialización vaga, lazy)
Intenciones y Servicios 30
31. StatusActivity (VI)
Cambiamos twitter
por getTwitter()
Intenciones y Servicios 31
32. El sistema de ficheros
● Podemos navegar por el sistema de
ficheros del dispositivo: Open Perspective
→ DDMS → File Explorer
Intenciones y Servicios 32
34. Particiones del sistema de
ficheros
● Haytres 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 34
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 35
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 36
37. Actividades e Intenciones
Aplicación
Actividad Main Android
Intent Result Intent
Sub-Actividad 1
Sub-actividad 2
Intenciones y Servicios 37
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 38
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 39
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 40
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 41
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 42
43. Ej. Block de notas (I)
http://developer.android.com/reference/android/content/Intent.html
http://developer.android.com/resources/samples/NotePad/index.html
Intenciones y Servicios 43
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 44
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 45
47. Ejemplo. Activar Acciones
estándar
●Vamos a hacer un
ejemplo
– Llamar a
intenciones
estándar
– Lanzar otras
actividades
Intenciones y Servicios 47
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 48
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 49
57. Emulador vs real
No encuentra actividad que
mande correo
Sí va en el teléfono
Intenciones y Servicios 57
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 58
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 62