Upload
carlos-a-iglesias
View
868
Download
0
Embed Size (px)
DESCRIPTION
Tema 4.4.1 Intenciones y Servicios
Citation preview
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]>
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?