Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Página 2 de 55
Introducción
Introducción
Esta última unidad está diseñada como una pequeña introducción a lo que supone desarrollar aplicaciones
Android actualmente.
Se comenzará tratando diferentes apartados del desarrollo de una aplicación (interfaces, imágenes, código…)
tomando como ejemplo una propuesta específica.
En la segunda parte del tema se explicarán los pasos necesarios para publicar una aplicación en Google Play.
Objetivos
Introducción
Este será solo un ejemplo de la multitud de aplicaciones que se pueden realizar en Android. Se ha buscado
implementar varios de los temas explicados en capítulos anteriores, además de una serie de controladores
de cada vez mayor uso.
En este caso, la idea es realizar una pequeña aplicación que nos permita mostrar una serie de preguntas tipo
trivial, responderlas y, si se desea, guardar la puntuación obtenida en una base de datos.
Las preguntas se obtendrán de la API Open Trivia DB cuyo único inconveniente es que solo están disponibles
en inglés, pero para conocer el funcionamiento será suficiente. Debido a esto no tiene sentido plantearse la
opción de realizar una aplicación multilenguaje (en otras circunstancias sería lo más normal).
Página 3 de 55
Estudio del problema
Ahora viene la parte más interesante. ¿Cómo se comienza a desarrollar una aplicación?
Como se puede ver, son una serie de ideas sobre los puntos que se está pensando desarrollar.
A continuación, viene la búsqueda de información y, en este caso, de una API que pueda satisfacer nuestras
necesidades.
Una vez concluido este brainstorming y buscado si hay APIs disponibles, arranca una parte quizás más
creativa (normalmente la realiza el departamento de arte, aunque no siempre) en la cual se decide cómo
estructurar la aplicación, las pantallas que la compondrán y qué funciones realizará cada una:
Pantalla de carga
Generar un aspecto más formal, simulando una carga.
Pantalla de menú
Un menú para moverse por las funciones principales de la aplicación.
Pantalla de agradecimientos
En este caso, para reconocer y hacer mención a las páginas de recursos gratuitos y a la API de la que se
obtienen las preguntas.
Pantalla de clasificación
Página 4 de 55
Muestra de forma ordenada las puntuaciones obtenidas y el jugador que las obtuvo.
Pantalla de preguntas
Quizá la más compleja, ya que debe mostrar las preguntas por pantalla, implementar los diálogos para permitir
responder y el guardado de puntuación y jugador.
En este punto suele ser un buen momento para contar con un diseñador gráfico que se encargue de la parte
visual de las pantallas y la iconografía de la aplicación. Con esto no se pretender decir que un desarrollador
no pueda diseñar iconografía y pantallas, sino que, por regla general, no generarán el mismo impacto en el
público objetivo que si son hechas por un profesional.
Aunque pueda parecer una inversión alta en algunos momentos, es la mejor opción para conseguir pantallas
muy vistosas, puesto que es importante no olvidar que una aplicación hay que venderla tanto visual como
funcionalmente.
Por último, una vez recibidos los diseños y el esquema de las pantallas es cuando comienza el trabajo de
programación.
Página 5 de 55
Pantalla de carga
Página 6 de 55
Realiza sobre todo una función estética, por lo que podría prescindirse de ella y no causaría ningún tipo de
disfunción en la aplicación. Es muy parecida a la que se realizó en el apartado Widgets del tema 2.
Gráficamente está formada por un ImageView y un ProgressBar.Horizontal. Este último deberá llevar asociado
un xml para indicar el formato de la barra y su progreso.
En este caso se ha definido una serie de colores, estilos y strings en la carpeta Resource para facilitar las
Página 7 de 55
tareas.
En cuanto a la activity contendrá un método con el que simula una
descarga y actualiza el progreso que, al finalizar, dará paso a la
“Pantalla Menú”.
Página 8 de 55
Página 9 de 55
Una vez implementado todo se debería obtener un resultado parecido al siguiente:
Página 10 de 55
Pantalla de menú
Desde esta pantalla se puede acceder a las funciones principales de la aplicación y además, es la encargada
de crear sus SharedPreferences.
La interfaz gráfica constará de un TextView que únicamente muestra el texto “Menú” y una serie de botones
que darán acceso al resto de funciones.
Estos botones se personalizan utilizando selectores xml para, cambiando la imagen de fondo, simular la
pulsación; además de una clase Java que hereda de Button y donde se configuran sus propiedades.
Página 11 de 55
Página 12 de 55
En cuanto a las funciones que implementa la activity está la creación de SharedPreferences a través de un
método que se ejecuta al inicializarse.
Página 13 de 55
Página 14 de 55
Una vez implementado todo, el aspecto en pantalla debería ser similar al de la imagen:
Página 15 de 55
Pantalla de agradecimientos
La de agradecimientos se trata quizá de la activity más sencilla de toda la aplicación. Simplemente muestra un
pantalla donde se dan las gracias a las diferentes fuentes de las que se ha obtenido información, como pueden
ser FlatIcon para iconografía y Open Trivia DB para las preguntas.
• El otro para mostrar un texto contenido en el archivo strings en el que se hace referencia y reconoce las
fuentes mencionadas.
Strings
Página 16 de 55
onCreate
Solo aparece el método básico onCreate que es el encargado de registrar la interfaz gráfica y mostrarla por
pantalla.
Página 17 de 55
Pantalla de clasificación
En la pantalla de clasificación se accede a la base de datos para listar de forma ordenada (orden descendente)
las puntuaciones de los diferentes jugadores que han decidido guardarlas.
La interfaz gráfica contiene un par de TextView para mostrar el título de las columnas y un ListView, uno de
los controladores más antiguos utilizados para mostrar una lista de elementos. Además, tiene opciones para
reconocer eventos de pulsación sobre ellos (aunque en este caso, no se utilizarán).
Página 18 de 55
Esto en cuanto a la interfaz principal de la activity, sin embargo, en este ejemplo será necesario también una
segunda interfaz conocida normalmente como "adaptador" que muestre el contenido gráfico de la celda del
ListView.
Página 19 de 55
Para implementar un ListView correctamente, a parte de la interfaz gráfica propia de la celda, es necesario
manejar también una clase Java que extenderá de un ArrayAdapter (en este caso de la clase modelo jugador).
Aquí se realizará la operación de "inflado" de la vista y asignación de la interfaz gráfica de la celda, así como el
registro de los elementos gráficos y su inicialización con los datos que recibe.
Antes de poder comenzar a desarrollar la activity es necesario implementar el adaptador de SQLite para tener
acceso a la base de datos. Los primeros pasos son, por orden, los siguientes:
Constantes
Normalmente se comienza declarando una serie de constantes que representan los nombres de tablas y
columnas.
Inner class
Página 20 de 55
A continuación, se crea una nueva inner class que extenderá de SQLiteOpenHelper y sobre la que se
implementarán los métodos onCreate y onUpgrade.
En este caso, también se aprovecha para generar un par de métodos que inicialicen la base de datos con
algunos valores por defecto.
Apertura y cierre
Una vez creados estos métodos se pasa a implementar los de apertura y cierre de la base de datos.
Página 21 de 55
Constructor
Terminados los pasos anteriores se dispone ya de todos los métodos necesarios para generar un constructor
adecuado.
Manejo BBDD
Por último, se deben generar los métodos necesarios para manejar la base de datos. Normalmente serían
todos los CRUD pero en este caso solo se implementarán los que se necesitan, como el listado de las
clasificaciones y la inserción de un nuevo jugador y puntuación.
Página 22 de 55
Ahora es el momento de centrarse en la activity.
Debe implementarse el método onDestroy desde el cual se cerrará la base de datos y el onCreate en el que,
aparte de registrar los elementos gráficos, deberá llamarse al método que obtiene el listado de puntuaciones.
De esta manera podrán enviarse los resultados al adaptador del ListView para mostrarlos por pantalla.
Método onDestroy
Método onCreate
Página 23 de 55
El resultado en ejecución debería ser algo parecido al siguiente:
Página 24 de 55
Pantalla de preguntas
Interfaz gráfica
Esta pantalla quizá sea la más complicada que haremos en el curso. Deberá realizar diferentes funciones:
En este caso, la interfaz gráfica será un poco particular, ya que se necesitan cuatro diferentes para realizar
todas las funciones:
Interfaz General
Contendrá tres TextView para indicar:
• Título de la activity.
• Etiqueta "Puntuación".
Página 25 de 55
Adaptador
Celda
Se
trata
de
otra
interfaz
compuesta
por:
• Un
ImageView
que
indica
si
la
pregunta
se
ha
respondido
correctamente
o
no.
• El
texto
de
la
pregunta
en
un TextView.
Página 26 de 55
Dialog
Pregunta
Se
trata
de
un
diálogo
que
contiene:
• Un
TextView
donde
se
mostrará
la
pregunta.
• Un
RadioGroup
con
hasta
4 RadioButtons
con
las
diferentes
respuestas.
• Un
Button
que
servirá
para
lanzar
la
comprobación
de
la
respuesta.
Página 27 de 55
Dialog
Guardar
Puntuaciones
Otro
diálogo
compuesto
por:
• Un
EditText
para
recoger
el
nombre
del
jugador.
• Un
TextView
para
mostrar
la
pregunta
“¿Desea
guardar?"
• Dos Buttons
para
confirmar
o
denegar
el
guardado.
Página 28 de 55
Página 29 de 55
Una
vez
definidas
las
diferentes
interfaces
lo
más
interesante
es
ir
recorriendo
las
funcionalidades
e
indicando
en
cada
una
qué
se
necesita
implementar.
Página 30 de 55
Preguntas y puntuación
Cargar preferencias
Para mostrar la puntuación se crea un método que permite el acceso a SharedPreferences, donde se guardan
estos resultados; y desde el método onCreate se actualiza sucesivamente la interfaz con su valor
correspondiente al responder correctamente.
Mostrar preguntas
Mostrar las preguntas es algo un poco más complejo, ya que antes de poder descargarlas se necesitará crear
un adaptador para el RecyclerView que registre los elementos de la vista e implemente también el método
listener para reconocer eventos onCLick o longClick sobre un componente de la lista.
Para ello debe crearse una nueva clase Java que extienda
de RecyclerView.Adapter, contenga una inner class que será la propia
vista, y herede de RecyclerView.ViewHolder.
Además de contener el registro de sus elementos deberá implementarse también el OnLongClickListener para
capturar los eventos de pulsación prolongada sobre ellos.
Página 31 de 55
En la clase principal deberá figurar su constructor.
Página 32 de 55
Descarga y parseo de datos
Ahora es el momento de preparar el método necesario para realizar la descarga y el parseo de los datos. Para
esto último se utilizarán dos clases:
• Una que los recibe tal cual de la API a través de la biblioteca volley.
• Otra que tiene unos campos extra que facilita la comprobación posterior de las respuestas mediante la
biblioteca gson.
Página 33 de 55
La actualización de un flag de preguntas recibidas.
Página 34 de 55
Por último, para poder realizar las preguntas será necesaria la comprobación de permisos (en este caso,
Internet) en el método onCreate, además de registrar los elementos gráficos. Para descargarlas deberá
determinarse antes que no han sido almacenadas previamente y que, además, no se ha finalizado el test.
Página 35 de 55
El resultado que se obtiene al ejecutar la aplicación debe ser similar al siguiente:
Página 36 de 55
Reconocer el evento pulsación prolongada y mostrar el diálogo para responder
En esta ocasión el reconocimiento del evento está implementado y no será necesario. Por lo tanto, lo único
que quedaría sería asociar el listener al adaptador e indicar en qué situaciones se tomaría la respuesta como
contestada y en cuáles se permite lanzar el método que abre el diálogo para responder y comprobar la
respuesta.
Para realizar esta acción se dispone de un método que hace aparecer un diálogo por pantalla indicando la
pregunta y las diferentes opciones de respuesta.
Cuando un usuario está seguro de su respuesta pulsa el botón inferior derecho para comprobarla y, en
Página 37 de 55
El resultado de la ejecución debe parecerse a:
Pregunta
Página 38 de 55
Página 39 de 55
Página 40 de 55
Respuesta actualizada
Página 41 de 55
Página 42 de 55
Comprobar si se han respondido todas las preguntas para guardar puntuación
Con esta última activity finalizaría la explicación de la aplicación, aunque podríamos realizar ahora alguna
de las mejoras disponibles, como mostrar una progressbar indeterminate mientras cargan las preguntas o
situar botones en la pantalla de agradecimientos que permitan acceder a la web de los recursos citados sin
necesidad de salir de la aplicación.
Introducción
Google Play es la tienda oficial de Android (hay otras alternativas) y el principal medio de distribución para
cualquier aplicación de este Sistema Operativo.
En este apartado trataremos los puntos básicos para poder publicarlas en esta plataforma.
Página 43 de 55
Preparando la aplicación
En primer lugar, se debe preparar la aplicación eliminando todos aquellos elementos que se utilizan
en debug. A continuación, es necesario revisar que los resources utilizados sean los definitivos y cumplan
todas las normas de tamaño de iconos, lanzamiento de la aplicación…
versionCode es muy importante, puesto que es necesario modificarlo conforme se producen cambios en la
aplicación para actualizarla en Google Play.
En cuanto al tema de las pruebas lo mejor es haber realizado las suficientes con la versión debug tanto en
simuladores como en diferentes terminales para tener la seguridad de conseguir que la aplicación se adapte
bien a los diferentes dispositivos e idiomas soportados.
Por último, se generará una APK firmada para su subida a Google Play.
Firmar una APK puede parecer complicado, pero con las herramientas de Android Studio viene todo integrado
para que sea más sencillo. Los pasos son:
Página 44 de 55
En la pantalla marcamos el módulo o la aplicación que se desea
firmar y pulsamos Next.
Página 45 de 55
Si no tenemos firma se generará una nueva con Create new.
Página 46 de 55
A continuación, se selecciona el destino de la APK y la forma de la
firma (es conveniente utilizar V1 y V2) y se pulsa Finish para
comenzar el proceso.
Página 47 de 55
En este punto se dispone de una APK lista para instalar en dispositivos y hacer las últimas comprobaciones
o bien para subirla a Google Play. También se puede obtener un APK sin firma que suele utilizarse para
testeos.
Es muy importante no perder la clave generada ni olvidar la contraseña, ya que una vez firmada una
aplicación con ella y subida a Google Play solo se podrá modificar o subir una APK nueva que haya sido firmada
con esa clave.
Página 48 de 55
Cuenta de desarrollo y publicación
Android es un sistema muy abierto, pero para utilizar Google Play como plataforma de distribución es
necesario tener en primer lugar una cuenta de desarrollador. Los pasos son los siguientes:
Página 49 de 55
Esta cuenta es permanente y, a día de hoy, solo debe realizarse un único pago sin importar el número de
aplicaciones que desarrollemos.
Con estos pasos ya se tendría habilitada una cuenta para el desarrollo y podría accederse a la Google Play
Console, desde donde administrar la distribución de la aplicación.
Ficha
Para subir una aplicación el primer paso consiste en crear una nueva ficha y completarla con nombre, idioma
predeterminado, breve descripción y capturas de pantalla en diferentes dispositivos. A esta sección se la
conoce como Ficha de Play Store.
Página 50 de 55
Versiones de la aplicación
A continuación, se debe subir la APK a Google Play a través del apartado “Versiones de la aplicación”, donde
se debe escoger el tipo de versión que se desea dar de alta, principalmente producción, beta o alfa.
Página 51 de 55
Se producirá una validación de la APK y, si no se supera, será necesario revisar qué paso hemos ejecutado
mal.
Clasificación de contenido
Una vez subida la APK se podrá acceder a la “Clasificación de Contenido” donde se debe responder una serie
de preguntas para indicar qué clase de aplicación es. También pueden figurar algunas que hagan referencia al
público objetivo o al tipo de aplicación.
Página 52 de 55
Una vez superada la clasificación se obtiene un pequeño certificado en el que viene indicada.
Precio y distribución
Por último, en la sección "Precio y distribución" hay que indicar si la aplicación es gratuita o de pago, en qué
países se quiere distribuir y, lo más importante, si está publicada o no.
Página 53 de 55
Es importante mencionar que una aplicación gratuita no podrá pasar a ser de pago. Si queremos empezar a
cobrar por ella debemos subir una nueva y Google recibirá una comisión del 30% de su importe.
En la parte final de este menú aparece una serie de consentimientos que se deberán revisar y permitir para
poder distribuir la app.
Una vez completados todos esto requisitos, escogido la opción de APK de producción y marcada la distribución
como “publicada”, pasadas unas horas debería estar disponible para descargar e instalar desde Google Play
Store.
Página 54 de 55
Resumen
En el primer punto de este tema se describió el proceso mediante el cual una serie de ideas generales se
van convirtiendo en las diferentes funciones y pantallas que conforman una aplicación, apoyándonos en una
serie de controles nuevos relacionados en gran medida con algo muy necesario como es el trabajo con listas,
tanto el ListView como el RecyclerView.
En la segunda parte se realizó el paso final de cualquier desarrollo de software: la distribución a los
usuarios. En este caso, se ha descrito cómo generar el ejecutable de una aplicación Android y los pasos y
credenciales necesarias para subirlo a una plataforma a nivel mundial como es Google Play Store.
Página 55 de 55