Android es el sistema operativo para dispositivos móviles más utilizado en el momento de la publicación de este libro, habiendo experimentado un gran incremento de usuarios en los...
Android es el sistema operativo para dispositivos móviles más utilizado en el momento de la publicación de este libro, habiendo experimentado un gran incremento de usuarios en los últimos años, y extendiéndose no sólo a teléfonos móviles, sino a otros dispositivos como tablets, televisores o videoconsolas, entre otros. Cuenta con un completo SDK que nos permitirá crear aplicaciones que utilicen todas las funcionalidades y servicios que nos ofrezcan estos dispositivos, y que podremos publicar en Google Play para cualquier tipo de dispositivo Android. Desarrollo de Aplicaciones para Android con Java nos proporciona una completa guía para la creación de aplicaciones con el SDK nativo de Android, estando actualizado hasta la versión 7.0 (Nougat) de este sistema operativo. El libro se divide en 22 capítulos donde se estudia, partiendo desde cero, cómo crear nuestra primera aplicación Android hasta conceptos avanzados como el diseño de interfaces, los fragments, drawables, el uso de estilos y temas, el acceso a los sensores del dispositivo, las pantallas multitouch, los servicios e hilos de ejecución, el almacenamiento de información mediante bases de datos SQLite, preferencias o ficheros, la serialización de datos, o el acceso a la red y a servicios REST. Los contenidos están organizados para que se puedan seguir paso a paso en el aprendizaje de esta tecnología o para que se puedan utilizar como manual de referencia. Incluye explicaciones sencillas y didácticas con ejemplos completos de código y 60 ejercicios resueltos. El libro contiene material adicional que podrá descargar accediendo a la ficha del libro en www.ra-ma.es.
Índice
SOBRE LOS AUTORES CAPÍTULO 1. INTRODUCCIÓN A LAS APLICACIONES ANDROID 1.1. HISTORIA DE ANDROID 1.2. APLICACIONES ANDROID 1.2.1. El archivo Manifest 1.2.2. El ciclo de ejecución de una aplicación 1.2.3. Recursos 1.2.4. Actividades 1.3. VERSIONES DE ANDROID Y COMPATIBILIDAD 1.4. EJERCICIOS PROPUESTOS 1.4.1. Ejercicio 1. Aplicaciones y servicios 1.4.2. Ejercicio 2. Versión de Android 1.4.3. Ejercicio 3. Guía de estilo CAPÍTULO 2. ENTORNO DE DESARROLLO 2.1. NUESTRO PRIMER PROYECTO CON ANDROID STUDIO 2.1.1. Instalación del entorno de desarrollo 2.1.2. Creando un proyecto 2.1.3. Definiendo los recursos de la aplicación 2.1.4. La actividad principal 2.1.5. Probando en un emulador o dispositivo real 2.2. CONSTRUCCIÓN DE PROYECTOS CON GRADLE 2.2.1. Configuración del proyecto Android 2.2.2. Dependencias del proyecto 2.2.3. Interfaz para la edición de las propiedades de Gradle 2.2.4. Librerías de compatibilidad 2.3. EJERCICIOS PROPUESTOS 2.3.1. Ejercicio 1. Creación del proyecto 2.3.2. Ejercicio 2. Probando la aplicación 2.3.3. Ejercicio 3. Añadiendo contenido a la actividad 2.3.4. Ejercicio 4. Internacionalización CAPÍTULO 3. NAVEGACIÓN ENTRE ACTIVIDADES MEDIANTE INTENTS 3.1. INTENTS 3.1.1. Usar Intents para lanzar actividades 3.1.2. Envío de datos mediante intents 3.1.3. Recuperar la respuesta de subactividades 3.1.4. Responder peticiones de Intents implícitos 3.2. NAVEGACIÓN 3.2.1. El atributo launchmode 3.2.2. Modificar el lanzamiento de actividades mediante Intents 3.2.3. Limpiar la pila de actividades 3.3. ESQUEMAS TÍPICOS DE NAVEGACIÓN 3.3.1. Iniciando una aplicación desde la pantalla inicial de Android 3.3.2. Abandonar una actividad con los botones BACK y HOME 3.4. EJERCICIOS PROPUESTOS 3.4.1. Ejercicio 1. Intents implícitos 3.4.2. Ejercicio 2. Intents explícitos 3.4.3. Ejercicio 3. Paso de parámetros entre actividades 3.4.4. Ejercicio 4. Resultado de la actividad CAPÍTULO 4. CREACIÓN DE INTERFACES DE USUARIO CON VISTAS Y LAYOUTS 4.1. VISTAS 4.1.1. Crear interfaces de usuario con vistas 4.1.2. Las vistas de Android 4.2. LAYOUTS 4.2.1. Creación de ficheros de layout 4.2.2. Estructura del layout 4.2.3. Layouts creados en código 4.2.4. Optimizar layouts 4.3. USO BÁSICO DE VISTAS Y LAYOUTS 4.3.1. TextView 4.3.2. EditText 4.3.3. Button 4.3.4. CheckBox 4.3.5. RadioButton 4.3.6. Spinner 4.3.7. LinearLayout 4.3.8. TableLayout 4.3.9. RelativeLayout 4.3.10. ScrollView 4.4. INTERFACES INDEPENDIENTES DE DENSIDAD Y RESOLUCIÓN 4.4.1. Múltiples archivos de recursos 4.4.2. Configuraciones de pantalla soportadas 4.4.3. Consejos para conseguir interfaces independientes de la resolución 4.5. CAMBIOS EN LA CONFIGURACIÓN DE LA INTERFAZ 4.5.1. Interfaces alternativas 4.5.2. Guardado de datos 4.5.3. Modo de ventanas múltiples 4.6. EJERCICIOS PROPUESTOS 4.6.1. Ejercicio 1. Interfaz de datos de una película 4.6.2. Ejercicio 2. Interfaz de edición de una película 4.6.3. Ejercicio 3. Independencia del hardware CAPÍTULO 5. CREACIÓN DE LISTAS 5.1. LISTAS 5.1.1. ListActivity 5.1.2. RecyclerView 5.2. ADAPTADORES 5.2.1. Adaptadores para ListView 5.2.2. Adaptadores para RecyclerView 5.3. CREACIÓN DE LISTAS CON LISTACTIVITY Y LISTVIEW 5.3.1. Listas con layout básico 5.3.2. Listas con layout personalizado 5.3.3. Selección de elementos 5.3.4. Modificando el layout de un ListActivity 5.3.5. Listas vacías 5.3.6. Listas de deslizar para refrescar 5.3.7. Creación de un adaptador propio 5.4. CREACIÓN DE LISTAS CON RECYCLERVIEW 5.4.1. Creación de un adaptador para RecyclerView 5.4.2. Layouts para el RecyclerView 5.4.3. Decoración y animaciones 5.4.4. Creación del RecyclerView 5.4.5. Selección de elementos del RecyclerView 5.5. EJERCICIOS PROPUESTOS 5.5.1. Ejercicio 1. Listado de películas básico 5.5.2. Ejercicio 2. Listado de películas con layout propio 5.5.3. Ejercicio 3. Eventos de la lista 5.5.4. Ejercicio 4. Listado de películas con RecyclerView CAPÍTULO 6. MENÚS Y APP BAR 6.1. MENÚ DE OPCIONES. 6.1.1. Definir el menú de una actividad 6.1.2. Personalizar elementos de menús 6.1.3. Actualización dinámica de opciones 6.1.4. Manejo de la selección de elementos 6.1.5. Submenús 6.1.6. Definiendo menús como recursos 6.2. APP BAR 6.2.1. Botón home 6.2.2. Elementos del menú en la app bar 6.2.3. App Bar y librería de compatibilidad 6.3. ACCIONES CONTEXTUALES 6.3.1. Menús contextuales 6.3.2. Barra contextual 6.4. TOOLBAR 6.4.1. Uso de toolbar como app bar 6.4.2. Gestión de toolbar 6.4.3. Reutilización de toolbar 6.5. EJERCICIOS PROPUESTOS 6.5.1. Ejercicio 1. Opciones del menú 6.5.2. Ejercicio 2. Botón HOME 6.5.3. Ejercicio 3. Borrado múltiple de películas CAPÍTULO 7. DEPURACIÓN Y PRUEBAS 7.1. DEPURACIÓN CON ANDROID STUDIO 7.1.1. Log y LogCat 7.1.2. Dalvik Debug Monitor Server (DDMS) 7.2. PRUEBAS UNITARIAS CON JUNIT 7.2.1. Configuración de JUnit 7.2.2. Creación de casos de prueba 7.2.3. Ejecución de los tests 7.3. PRUEBAS DE REGRESIÓN CON ROBOTIUM 7.3.1. Configuración de Robotium 7.3.2. Creación de casos de prueba 7.4. PRUEBAS DE ESTRÉS CON MONKEY 7.5. EJERCICIOS PROPUESTOS 7.5.1. Ejercicio 1. Generación de logs 7.5.2. Ejercicio 2. Pruebas de unidad 7.5.3. Ejercicio 3. Pruebas con Monkey CAPÍTULO 8. INTERFACES UNIVERSALES MEDIANTE FRAGMENTOS 8.1. CREACIÓN DE FRAGMENTOS 8.2. CICLO DE VIDA DE LOS FRAGMENTOS 8.3. AÑADIR UN FRAGMENTO A UNA ACTIVIDAD 8.4. TRANSICIONES ENTRE FRAGMENTOS 8.5. COMUNICACIÓN ENTRE FRAGMENTOS 8.6. MENÚS EN FRAGMENTOS 8.7. FRAGMENTOS Y LIBRERÍAS DE COMPATIBILIDAD 8.8. EJERCICIOS PROPUESTOS 8.8.1. Ejercicio 1. Filmoteca con fragmentos 8.8.2. Ejercicio 2. Transiciones entre fragmentos CAPÍTULO 9. NOTIFICACIONES 9.1. NOTIFICACIONES TOAST 9.1.1. Uso de las notificaciones Toast 9.1.2. Cambiar la alineación 9.1.3. Personalización del aspecto 9.2. SNACKBAR 9.2.1. Uso de Snackbar 9.2.2. Añadir una acción 9.2.3. Personalización del aspecto. 9.2.4. CoordinatorLayout 9.3. CUADROS DE DIÁLOGO 9.3.1. Construcción de diálogos mediante fragments 9.3.2. Mostrar un diálogo 9.3.3. Comunicación con la actividad 9.3.4. Tipos de diálogo 9.4. NOTIFICACIONES DE LA BARRA DE ESTADO 9.4.1. Crear una notificación 9.4.2. Mostrar una notificación 9.4.3. Actualizar una notificación 9.4.4. Eliminar una notificación 9.4.5. Más opciones de configuración 9.5. EJERCICIOS PROPUESTOS 9.5.1. Ejercicio 1. Notificaciones con Toast 9.5.2. Ejercicio 2. Notificaciones con Snackbar 9.5.3. Ejercicio 3. Diálogos de selección 9.5.4. Ejercicio 4. Notificaciones en la barra de estado CAPÍTULO 10. ELEMENTOS DRAWABLES 10.1. IMÁGENES 10.1.1. Bitmaps 10.2. IMÁGENES NINE-PATCH 10.2.1. Transformar una imagen a nine-patch 10.3. COLORES 10.4. FORMAS 10.4.1. Uso del elemento shape 10.4.2. Gradientes 10.5. LISTA DE ESTADOS 10.6. LISTA DE NIVELES 10.7. LISTA DE CAPAS 10.8. ANIMACIÓN POR FOTOGRAMAS 10.8.1. Definición programática 10.9. TRANSICIÓN, INSERCIÓN, RECORTE Y ESCALA 10.10. DRAWABLES DESDE JAVA 10.11. EJERCICIOS PROPUESTOS 10.11.1. Ejercicio 1. Personalización del aspecto 10.11.2. Ejercicio 2. Personalización de botones 10.11.3. Ejercicio 3. Animación por fotogramas 10.11.4. Ejercicio 4. Niveles CAPÍTULO 11. PERSONALIZACIÓN DE COMPONENTES 11.1. EXTENSIÓN DE VISTAS EXISTENTES 11.1.1. Extendiendo la funcionalidad de un TextView 11.1.2. Incluir un componente personalizado en una actividad 11.2. COMPONENTES COMPUESTOS 11.2.1. Crear un componente compuesto 11.2.2. Definir el componente compuesto mediante código 11.2.3. Añadir funcionalidad 11.3. COMPONENTES PROPIOS 11.3.1. Lienzo y pincel 11.3.2. Primitivas geométricas 11.3.3. Cadenas de texto 11.3.4. Imágenes y Drawables 11.3.5. Medición del componente 8 11.3.6. Parametrización desde XML con atributos propios 11.3.7. Añadir funcionalidad 11.3.8. Actualización del contenido 11.4. EJERCICIOS PROPUESTOS 11.4.1. Ejercicio 1. Extensión de vistas existentes 11.4.2. Ejercicio 2. Componentes compuestos 11.4.3. Ejercicio 3. Componentes propios CAPÍTULO 12. ESTILOS Y TEMAS 12.1. DEFINICIÓN DE ESTILOS Y TEMAS 12.1.1. Herencia de estilos 12.2. USO DE ESTILOS Y TEMAS 12.2.1. Cómo aplicar un estilo 12.2.2. Cómo aplicar un tema 12.2.3. Temas definidos por el sistema 12.2.4. Atributos definidos por el sistema 12.2.5. Estilo basado en la versión de la plataforma 12.3. CONSEJOS SOBRE EL USO DE ESTILOS 12.4. EJERCICIO PROPUESTO CAPÍTULO 13. PANTALLA TÁCTIL Y DETECCIÓN DE GESTOS 13.1. EVENTOS DE PULSACIÓN 13.1.1. Captura de eventos de pulsación para una sola vista 13.1.2. Dispositivos multitouch 13.2. RECONOCIMIENTO DE GESTOS 13.2.1. Gesto de doble pulsación 13.2.2. Detector de gestos simple 13.2.3. Más detectores de gestos 13.3. EJERCICIOS PROPUESTOS 13.3.1. Ejercicio 1. Pantalla táctil 13.3.2. Ejercicio 2. Gestos CAPÍTULO 14. SENSORES 14.1. TRABAJANDO CON SENSORES ESTÁNDAR 14.1.1. Sensor como requisito 14.1.2. Escuchando a los eventos del sensor 14.1.3. Sistema de coordenadas 14.2. GEOLOCALIZACIÓN 14.2.1. Información del proveedor 14.2.2. Comprobar disponibilidad 14.2.3. Consultar la localización 14.2.4. Geocoding 14.3. RUNNING PERMISSIONS 14.4. RECONOCIMIENTO DEL HABLA 14.5. CÓMO PROBAR LOS SENSORES 14.6. EJERCICIOS PROPUESTOS 14.6.1. Ejercicio 1. Sensores estándar 14.6.2. Ejercicio 2. Geolocalización 14.6.3. Ejercicio 3. Reconocimiento del habla CAPÍTULO 15. MULTIMEDIA 15.1. CONTENIDO MULTIMEDIA EN DISPOSITIVOS ANDROID 15.1.1. Formatos soportados 15.1.2. Gestión de los medios en el almacenamiento local 15.2. REPRODUCCIÓN DE AUDIO 15.2.1. Inicialización del reproductor de medios 15.2.2. Métodos del reproductor de medios 15.2.3. Liberación del reproductor de medios. 15.2.4. Streams de audio y control de volumen 15.2.5. Desconexión de auriculares 15.3. REPRODUCCIÓN DE VÍDEO 15.3.1. Reproducir vídeo mediante VideoView 15.3.2. Reproducir vídeo con MediaPlayer 15.4. CAPTURA DE MEDIOS 15.4.1. Almacenamiento de medios 15.4.2. Toma de fotografías mediante intents 15.4.3. Captura de vídeo mediante intents 15.4.4. Captura de medios desde nuestra actividad 15.5. AGREGAR FICHEROS MULTIMEDIA EN EL MEDIA STORE 15.6. EJERCICIOS PROPUESTOS 15.6.1. Ejercicio 1. Toma de fotografías 15.6.2. Ejercicio 2. Reproducción de audio 15.6.3. Ejercicio 3. Reproducción de vídeo CAPÍTULO 16. HILOS DE EJECUCIÓN. 16.1. THREAD 16.1.1. Ejecución del hilo 16.1.2. Acceso a la interfaz gráfica 16.2. ASYNCTASK 16.2.1. Iniciar una AsyncTask 16.2.2. Ejemplo 16.3. ASYNCTASK VS. THREAD 16.4. INDICADOR DE ACTIVIDAD. 16.5. EJERCICIO PROPUESTO CAPÍTULO 17. SERVICIOS EN SEGUNDO PLANO 17.1. SERVICIOS PROPIOS 17.1.1. Iniciar y detener un servicio 17.1.2. Comportamiento de reinicio 17.1.3. Servicios prioritarios 17.1.4. Servicios y tareas costosas 17.2. INTENTSERVICE 17.3. ATAR UN SERVICIO A OTRO COMPONENTE (BINDING) 17.4. SERVICIOS EN UN PROCESO SEPARADO 17.5. COMUNICACIÓN CON UN SERVICIO 17.5.1. Comunicación con IPC 17.5.2. Comunicación con PendingIntent 17.5.3. Comunicación con BroadcastReceiver 17.6. SERVICIOS DEL SISTEMA 17.6.1. AlarmManager para programar servicios 17.7. EJERCICIOS PROPUESTOS 17.7.1. Ejercicio 1. Contador mediante Service 17.7.2. Ejercicio 2. Contador con IntentService 17.7.3. Ejercicio 3. Reproductor de audio mediante binding y servicios prioritarios CAPÍTULO 18. FICHEROS Y SERIALIZACIÓN DE DATOS 18.1. FLUJOS DE DATOS DE ENTRADA/SALIDA 18.2. ACCESO A FICHEROS 18.2.1. Directorios privados de la aplicación 18.2.2. Almacenamiento externo 18.2.3. Directorios de caché 18.2.4. Ficheros compartidos 18.2.5. Lectura y escritura de ficheros 18.2.6. Pruebas con el almacenamiento externo 18.3. ACCESO A RECURSOS DE LA APLICACIÓN 18.4. CODIFICACIÓN DE DATOS 18.5. SERIALIZACIÓN DE OBJETOS 18.6. CLASES PARCELABLES 18.7. EJERCICIOS PROPUESTOS 18.7.1. Ejercicio 1. Lectura de ficheros 18.7.2. Ejercicio 2. Serialización de datos CAPÍTULO 19. PREFERENCIAS DEL SISTEMA 19.1. CREAR Y GUARDAR PREFERENCIAS 19.2. GUARDAR PREFERENCIAS 19.3. LEER PREFERENCIAS 19.4. INTERFAZ DE USUARIO PARA LAS PREFERENCIAS 19.4.1. Actividad de preferencias 19.4.2. Fragmento de preferencias 19.4.3. Múltiples paneles de preferencias 19.5. EJERCICIOS PROPUESTOS 19.5.1. Ejercicio 1. Preferencias del usuario 19.5.2. Ejercicio 2. Actividad de preferencias CAPÍTULO 20. BASES DE DATOS CON SQLITE 20.1. CREAR, ACTUALIZAR Y CONECTAR 20.2. OBTENER ACCESO A LA BASE DE DATOS 20.3. CONSULTAR DATOS 20.4. INSERTAR DATOS 20.5. ACTUALIZAR DATOS 20.6. ELIMINAR DATOS 20.7. DÓNDE SE GUARDA LA BASE DE DATOS 20.8. ADAPTADORES 20.9. EJERCICIO PROPUESTO CAPÍTULO 21. ACCESO A LA RED 21.1. CONEXIÓN A UNA URL 21.1.1. Descargar contenido 21.1.2. Descargar una imagen 21.1.3. Configuración 21.2. COMPROBACIÓN DE LA CONECTIVIDAD 21.3. DESCARGA LAZY DE IMÁGENES 21.3.1. Implementación de la descarga lazy 21.3.2. Descarga lazy solo cuando no se hace scroll 21.3.3. Referencias débiles a elementos 21.4. EJERCICIOS PROPUESTOS 21.4.1. Ejercicio 1. Visor de HTML 21.4.2. Ejercicio 2. Descarga lazy de imágenes CAPÍTULO 22. SERVICIOS REST 22.1. FUNDAMENTOS DE REST 22.2. CABECERAS DE LA PETICIÓN 22.3. TIPOS DE PETICIONES REST 22.3.1. Petición tipo GET 22.3.2. Petición tipo POST 22.3.3. Petición tipo PUT 22.3.4. Petición tipo DELETE 22.4. AUTENTIFICACIÓN EN SERVICIOS REMOTOS 22.4.1. Seguridad HTTP básica 22.5. PROCESAR CONTENIDOS EN FORMATO XML 22.6. PROCESAR CONTENIDOS EN FORMATO JSON 22.7. EJERCICIOS PROPUESTOS 22.7.1. Ejercicio 1. Procesamiento de formato XML 22.7.2. Ejercicio 2. Peticiones REST y JSON 22.7.3. Ejercicio 3. Cliente REST completo MATERIAL ADICIONAL ÍNDICE ALFABÉTICO