DESARROLLO DE APLICACIONES ANDROID CON JAVA

DESARROLLO DE APLICACIONES ANDROID CON JAVA

LOZANO ORTEGA, MIGUEL ÁNGEL

29,90 €
IVA incluido
Sin existencias. Consulte disponibilidad
Editorial:
Ra-Ma Editorial
Año de edición:
2017
Materia
Literatura
ISBN:
978-84-9964-700-5
Páginas:
434
Encuadernación:
Rústica
29,90 €
IVA incluido
Sin existencias. Consulte disponibilidad
Añadir a favoritos

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

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.

Artículos relacionados

  • BLACKWATER VI. LLUVIA
    MCDOWELL, MICHAEL
    Descubre el sexto y último volumen de la saga Blackwater. Una saga matriarcal. Mujeres poderosas que luchan por el dominio durante generaciones. Una atmo´sfera u´nica para una lectura adictiva. Un retrato realista con toques sobrenaturales. Escritura magistral y visual en un ambicioso proyecto entre el pulp y HBO. «Michael Mcdowell: mi amigo, mi maestro. Fascinante, aterrador,...
    En stock. Envío urgente.

    9,90 €

  • ISLA DE LOS LATIDOS DEL CORAZÓN, LA
    MESSINA, LAURA
    Una historia poderosa y conmovedora sobre la tristeza, la esperanza, la amistad y el amor.En las afueras de Tokio, en una pequeña ciudad bañada por el océano y rodeada de montañas, se encuentra la casa donde Shuichi pasó su infancia y a la que acaba de regresar. Shuichi es un famoso ilustrador, tiene cuarenta años y una cicatriz en medio del pecho. Vive obsesionado con su coraz...
    Sólo uno disponible. Envío urgente.

    17,50 €

  • EL CAMINO DE REGRESO A CASA
    NISHI, KANAKO
    Kaoru se detiene al comienzo de la calle. La casa en la que ha crecido parece ahora mucho más pequeña de lo que recordaba. Pero cuando Sakura lo recibe agitando la cola, el sentimiento de confusión desaparece. Kaoru está de nuevo en casa. Y ha llegado el momento de reencontrarse con su familia.Hubo un tiempo en que los Hasegawa eran la familia perfecta. Los padres de Kaoru siem...
    Sólo uno disponible. Envío urgente.

    19,00 €

  • LAS SINGULARIDADES
    BANVILLE, JOHN
    «NUNCA PODRÉ VOLVER A ESCRIBIR UN LIBRO ASÍ. ES COMO TODOS MIS LIBROS UNIDOS EN UNO SOLO» La nueva novela del gran maestro irlandés, ganador de los premios Príncipe de Asturias, Man Booker y Franz Kafka, y «Nobel cercano si hay justicia» (Rodrigo Fresán): una clase magistral de humor, nostalgia e inteligencia «Una de las creaciones más admirables que ha compuesto hasta la fec...
    Sólo uno disponible. Envío urgente.

    12,95 €

  • LA VIDA EN UNA TAZA DE TÉ
    DOÑATE, ÁNGELES
    Hay quienes aseguran que los objetos tienen alma. Que su existencia, tan diferente a la de los seres humanos, guiada por el uso y el silencio, nos marca muchas veces de una manera irreversible. Que nos acompañan durante toda una vida, embelleciendo nuestros días, recordándonos momentos y personas importantes... Y que a veces, incluso, están destinados a unir a pesar de las dist...
    Sólo uno disponible. Envío urgente.

    18,00 €

  • BLACKWATER V. LA FORTUNA
    MCDOWELL, MICHAEL
    Descubre el quinto volumen de la saga Blackwater. Una saga matriarcal. Mujeres poderosas que luchan por el dominio durante generaciones. Una atmo´sfera u´nica para una lectura adictiva. Un retrato realista con toques sobrenaturales. Escritura magistral y visual en un ambicioso proyecto entre el pulp y HBO. «Michael Mcdowell: mi amigo, mi maestro. Fascinante, aterrador, simplem...
    En stock. Envío urgente.

    9,90 €

Otros libros del autor