3 Diseño SW 36
3.1 Diseño Android 36
3.1.3 Descripción de bloques principales 40
3.1.3 Descripción de bloques principales
APLICACION
CONFIGURACION PROGRAMA PRINCIPAL
UBICACION TRANSPORTE CALLE METRO AUTOBUS CERCANIAS ESTACION NOMBRE TIEMPO ACTIVAR DES-ACTIVAR ….. …. ….. ….. ….. ….. ESCUCHAR MENSAJES
Figura 27 Flujo de programa Android
En el esquema de bloques podemos ver lo que sería la estructura de una aplicación. Como podemos ver al principio de la aplicación nos encontraremos con una pantalla donde deberemos de elegir si comenzamos a utilizar la aplicación o deseamos cambiar la configuración.
Figura 28 Primera pantalla
En esta primera pantalla se muestran dos botones a la vez que el sistema TTS (text‐to‐ speach) comienza a lanzarnos indicaciones para utilizar la aplicación.
Una vez terminada la explicación sonora de las opciones de cada pantalla, la aplicación lanza el reconocimiento de voz para que el usuario elija entre una de las opciones disponible en esa pantalla.
Figura 29 Reconocimiento de voz
Esta aplicación que es propia del sistema Android reconoce el comando que el usuario pide e inicia la acción pertinente que puede ser ir a la siguiente pantalla o salir para comenzar la aplicación.
Una vez tenemos todo configurado como el usuario desea la aplicación se queda en escucha de alguna comunicación Bluetooth para dar indicaciones pertinentes al usuario.
Como segunda opción toda la aplicación se puede manejar mediante pulsaciones en las opciones que aparecen en pantalla, pero no es el objetivo de esta aplicación.
Cuando hemos lanzado la aplicación esta nos indicara que hay un mensaje disponible y mediante un toque en cualquier parte de la pantalla nos dará la información disponible en el punto bluetooth que esté más cerca.
3.1.3.1Descripción clases proyecto Android
3.1.3.1.1 Estructura proyecto Android
Para la realización del proyecto Android hemos utilizado la plataforma de desarrollo ANDROID SDK.
En el ANEXO C se describe los pasos necesarios para la instalación de dicho IDE.
Una vez instalados todos los sw necesarios así como sus complementos pasamos a describir todos los archivos que vamos a necesitar para la creación de nuestro proyecto así como su implementación en este proyecto.
Para empezar a comprender cómo se construye una aplicación Android vamos a echar un vistazo a la estructura general de un proyecto tipo.
Cuando creamos un nuevo proyecto Android en Eclipse se genera
automáticamente la estructura de carpetas necesaria para poder generar posteriormente la aplicación. Esta estructura será común a cualquier aplicación, independientemente de su tamaño y complejidad.
En la siguiente imagen vemos los elementos creados inicialmente para un nuevo proyecto Android:
Figura 30 Estructura carpetas Android
Describamos los elementos principales.
Carpeta /src/
Contiene todo el código fuente de la aplicación, código de la interfaz gráfica, clases auxiliares, etc. Inicialmente, Eclipse creará por nosotros el código básico de la pantalla (Activity) principal de la aplicación, siempre bajo la estructura del paquete java definido.
Figura 31 Carpeta src
En nuestro proyecto en esta carpeta tenemos recopilados todos los códigos de cada pantalla. En la siguiente tabla se describen cada una de las pantallas y clases necesarias en nuestra aplicación.
Nombre Clase Descripción
AdminSQLiteOpenHelper.java
Clase necesaria para poder generar nuestra
base de datos BluethootActivity.java Activity para inicializar el
Nombre Clase Descripción
BluetoothChatService.java
Clase que genera el servicio dentro de la aplicación Android para
poder utilizar el bluetooth del dispositivo
ClaseDatos.java
Clase que no tiene asignada una ventana donde podamos actuar.
Con esta clase creamos una base de datos
Pantalla_Activacion.java
Pantalla donde indicamos a la aplicación
que propiedad se debe activar o desactivar en la
base de datos
Pantalla_calle_caracteristicas_cajero.java
Pantalla que nos permite configurar las diferentes características de cajero:
Tipo Nombre
Estado
Pantalla_calle_caracteristicas_obras.java
Pantalla que nos permite configurar los diferentes
características de las obras:
Tipo Duración Protecciones
Nombre Clase Descripción
Pantalla_calle_caracteristicas_semaforo.java
Pantalla que nos permite configurar los diferentes
características de los semáforos: Estado Duración Distancia Pantalla_calle_distancia_semaforo.java
Pantalla que nos permite configurar a que distancias de semáforos
queremos que nos informe: Más de diez metros Menos de diez metros Menos de cinco metros
Pantalla_calle_duracion_obras.java
Pantalla que nos permite configurar los tiempo de duración de las obras:
Un día Dos días Sin determinar
Pantalla_calle_duracion_semaforo.java
Pantalla que nos permite configurar los tiempo de
duración de los semáforos:
Un minuto Menos de un minuto Menos de treinta seg.
Nombre Clase Descripción
Pantalla_calle_estado_cajero.java
Pantalla que nos permite configurar las diferentes características de cajero:
Funciona Averiado
Otro
Pantalla_calle_estado_semaforo.java
Pantalla que nos permite configurar los diferentes
estados de los semáforos: Funciona Averiado Otro Pantalla_calle_nombre_cajero.java
Pantalla que nos permite configurar las diferentes
nombres de cajero: Santander
BBVA Otro
Pantalla_calle_protecciones_obras.java
Pantalla que nos permite configurar las diferentes
características de las protecciones: Valla Zanja Andamio Pantalla_calle_tipo_cajero.java
Pantalla que nos permite configurar las diferentes características del tipo
de cajero: Interior Exterior Otros
Nombre Clase Descripción
Pantalla_calle_tipo_obras.java
Pantalla que nos permite configurar los diferentes
tipos de obras: Edificio
Calle Otros
Pantalla_Destino.java
Pantalla que nos permite configurar los diferentes
tipos de destinos: Nombre
Horario Incidencia
Pantalla_Estacion.java
Pantalla que nos permite configurar los diferentes
tipos de estaciones: Nombre
Horario Incidencia
Pantalla_tipo_supermercado.java
Pantalla que nos permite configurar los diferentes tipos horario de apertura en los supermercados:
Ocho Doce Veinticuatro
Pantalla_ubicacion_caracteristicas_farmacia.java
Pantalla que nos permite configurar las diferentes
características de las farmacias :
Tipo Día laboral
Nombre Clase Descripción
Pantalla_ubicacion_caracteristicas_supermercado.java
Pantalla que nos permite configurar las diferentes
características de los supermercados : Tipo Día laboral Horario Pantalla_ubicacion_día_laboral.java
Pantalla que nos permite configurar las diferentes
jornadas de trabajo: Lunes a viernes Fines de semana
Todos los días
Pantalla_ubicacion_farmacia.java
Pantalla que nos permite configurar los diferentes tipos horario de apertura
en las farmacias: Ocho Doce Veinticuatro
Pantalla_ubicacion_horario.java
Pantalla que nos permite configurar los diferentes
tipos horario de apertura:
Mañana Tarde Todo el día
Nombre Clase Descripción
Pantalla_ubicacion_tipo_farmacia.java
Pantalla que nos permite configurar los diferentes tipos horario de apertura
en las farmacias: Ocho Doce Veinticuatro
Pantalla_ubicacion_tipo_supermercado.java
Pantalla que nos permite configurar los diferentes tipos de supermercado:
Vegetariano Nacional Internacional
PantallaCalle.java
Pantalla que nos permite configurar los diferentes tipos de opciones en la calle: Semáforo Obras Cajero PantallaServicios.java
Pantalla donde se nos permite elegir que servicio queremos configurar: Transporte Calle Ubicación PantallaTiempo.java Pantalla donde configuramos las propiedades de tiempo: Último Siguiente Incidencia
Nombre Clase Descripción
PantallaTransporte.java
Pantalla que nos permite configurar los diferentes
tipos de transporte : Metro Autobús Cercanías
PantallaTransporte2.java
Pantalla donde nos permite elegir que factor
queremos configurar en los transportes: Tiempo Estación Destino PantallaUbicacion.java
Pantalla que nos permite configurar los diferentes tipos de ubicaciones : Restaurantes Supermercados Farmacias Ventanas.java Pantalla principal de inicio de aplicación. Aquí
se decide que acción se toma si lanzar o
configurar.
Carpeta /res/
Contiene todos los ficheros de recursos necesarios para el proyecto: imágenes, vídeos, cadenas de texto, etc. Los diferentes tipos de recursos de deberán distribuir entre las siguientes carpetas:
/res/drawable/. Contienen las imágenes de la aplicación. Se puede
utilizar diferentes recursos dependiendo de la resolución del dispositivo.
/res/layout/. Contienen los ficheros de definición de las diferentes
pantallas de la interfaz gráfica. Se puede dividir en /layout y /layout‐ land para definir distintos layouts dependiendo de la orientación del dispositivo.
En nuestra aplicación vamos a definir los siguientes layouts:
Descripcion Layouts activity_clase_datos.xml activity_connexion_bluetooth.xml activity_main.xml activity_pantalla__activacion.xml activity_pantalla__destino.xml activity_pantalla__estacion.xml activity_pantalla_calle_caracteristicas_cajero.xml activity_pantalla_calle_caracteristicas_obras.xml activity_pantalla_calle_caracteristicas_semaforo.xml activity_pantalla_calle_distancia_semaforo.xml activity_pantalla_calle_duracion_obras.xml activity_pantalla_calle_duracion_semaforo.xml activity_pantalla_calle_estado_cajero.xml activity_pantalla_calle_estado_semaforo.xml activity_pantalla_calle_nombre_cajero.xml activity_pantalla_calle_protecciones_obras.xml activity_pantalla_calle_tipo_cajero.xml activity_pantalla_calle_tipo_obras.xml activity_pantalla_ubicacion_caracteristicas.xml activity_pantalla_ubicacion_día_laboral.xml activity_pantalla_ubicacion_farmacia.xml activity_pantalla_ubicacion_horario.xml activity_pantalla_ubicacion_restaurante.xml activity_pantallla_ubicacion_supermercado.xml pantalla_ubicacion_tipo_farmacia.xml
/res/anim/. Contiene la definición de las animaciones utilizadas por la
aplicación.
/res/menu/. Contiene la definición de los menús de la aplicación.
/res/values/. Contiene otros recursos de la aplicación como por
ejemplo cadenas de texto (strings.xml), estilos (styles.xml), colores (colors.xml), etc.
/res/xml/. Contiene los ficheros XML utilizados por la aplicación.
/res/raw/. Contiene recursos adicionales, normalmente en formato
distinto a XML, que no se incluyan en el resto de carpetas de recursos.
Figura 32 Carpeta res
Carpeta /gen/
Contiene una serie de elementos de código generados automáticamente al compilar el proyecto. Cada vez que generamos nuestro proyecto, la maquinaria de compilación de Android genera por nosotros una serie de ficheros fuente en java dirigido al control de los recursos de la aplicación.
pantallacalle.xml pantallainicio.xml pantallametro.xml pantallaservicios.xml pantallatiempo.xml pantallatransporte.xml pantallatransporte2.xml pantallaubicacion.xml
Figura 33 Carpeta gen
El más importante es el que se puede observar en la imagen, el fichero R.java, y la clase R.
Esta clase R contendrá en todo momento una serie de constantes con los IDs de todos los recursos de la aplicación incluidos en la carpeta /res/, de forma que podamos acceder fácilmente a estos recursos desde nuestro código a través de este dato.
Carpeta /assets/
Contiene todos los demás ficheros auxiliares necesarios para la aplicación (y que se incluirán en su propio paquete), como por ejemplo ficheros de configuración, de datos, etc.
La diferencia entre los recursos incluidos en la carpeta /res/raw/ y los incluidos en la carpeta /assets/ es que para los primeros se generará un ID en la clase R y se deberá acceder a ellos con los diferentes métodos de acceso a recursos. Para los segundos sin embargo no se generarán IDs y se podrá acceder a ellos por su ruta como a cualquier otro fichero del sistema. Usaremos uno u otro según las necesidades de nuestra aplicación.
Fichero AndroidManifest.xml
Contiene la definición en XML de los aspectos principales de la aplicación, como por ejemplo su identificación (nombre, versión, icono, …), sus componentes (pantallas, mensajes, …), o los permisos necesarios para su ejecución. Aparte de otras cosas, AndroidManifest.xml se encarga de :
Nombra el paquete JAVA. Cada paquete JAVA lleva un identificador único en la aplicación.
Describe cada uno de los componentes de la aplicación — activities, services y broadcast receivers junto con content providers de los que nuestra aplicación hace uso. Nombra las clases que implementan cada uno de sus componentes y publica sus posibles opciones. Si necesitas acceder a una Activity o un Intent, lo declaramos.
Determina que procesos implementa.
Declara los permisos que necesita nuestra aplicación.
Declara, así mismo, que permisos requieren otras partes para interactuar con nuestra aplicación.
Permite definir niveles mínimos y máximo de SDK en los que nuestra aplicación será compatible.
Lista las librerías que son enlazadas a nuestra aplicación.
En nuestra aplicación vamos a solicitar permisos para acceder a internet y tener acceso para activar el bluetooth del dispositivo.
<uses‐permission android:name="android.permission.INTERNET" /> ‐‐> Permite a las aplicaciones abrir sockets de red
<uses‐permission android:name="android.permission.BLUETOOTH" /> ‐‐> Permite que las aplicaciones se conecten a dispositivos con Bluetooth emparejados
<uses‐permission android:name = "android.permission.BLUETOOTH_ADMIN" /> ‐‐> Permite a las aplicaciones para descubrir y emparejar dispositivos Bluetooth
Otra opción que vamos a definir en nuestro archivo manifest será que todas las pantallas definidas en el layout solo van a tener una posición determinada, es decir no se podrá utilizar la opción de rotar la pantalla que viene
predeterminada en la mayoría de los dispositivos móviles. Esto lo
implementamos en el archivo manifest incluyendo el siguiente comando:
android:screenOrientation="portrait"
3.1.3.1.2 Subir aplicación a Google Play
Una vez la aplicación esta depurada y sin errores el plugin de Eclipse nos proporciona la herramienta para generar la aplicación, que podremos descargar en nuestro dispositivo y se podrá instalar. Esta aplicación tiene la extensión “.apk”.
Básicamente para generar esta aplicación se debe de rellenar los siguientes datos:
Alias: Nombre con el que queremos que se identifique Password: clave para crear la aplicación
Confirm: Se debe de confirmar el password anterior
Validity(years):Este campo se debe de rellenar con un mínimo de 25 años
First and Last Name: Nombre del responsable del desarrollo
Organizational Unit and Organization: Empresa y unidad empresarial City or Locality: Ciudad donde se hizo el desarrollo
State or Province: Ciudad donde se hizo el desarrollo Country Code(XX):
Figura 34 Formulario para generar fichero .apk
Una vez generada debemos de accede a nuestra cuenta como desarrolladores en la siguiente dirección:
https://play.google.com/apps/publish/signup/
Para tener acceso debemos de pagar una cuota de 25$. Tendrás que rellenar la información de tu aplicación que se indica a continuación:
Subir recursos:
Archivo APK:
El tamaño máximo admitido de un único archivo APK es 50 MB. Se puede utilizar archivos de expansión para subir recursos adicionales como, por ejemplo, gráficos. Si un único archivo APK no es suficiente para todos los dispositivos que se desean, se puede subir varios archivos APK en la misma entrada de aplicación para que cada uno se encargue de la configuración de un dispositivo diferente.
Hay que tener en cuenta que los nombres de paquetes de los archivos de aplicaciones son únicos y permanentes, por lo que debes elegirlos con cuidado. Los nombres de paquetes no se pueden eliminar ni reutilizar en el futuro. Si se
pierde tu almacén de claves, habrá que publicar la aplicación con un nuevo
nombre de paquete y una nueva clave. También se debe actualizar la
descripción de la aplicación original y eliminar su publicación.
Borrador de archivo APK de aplicación
Al subir un archivo APK, este se puede guardar como un borrador mientras editas el resto de aspectos de la lista. Habrá un botón para guardar el borrador en el cuadro de diálogo después de subir el archivo APK. Si se necesitara añadir una nueva versión del archivo APK, pero no quieres publicarla, accede de forma inmediata a Google Play, cambia al modo avanzado y guarda tu nuevo archivo APK como borrador.
Capturas de pantalla
Son obligatorias dos capturas de pantalla y se pueden utilizar otras seis de forma opcional.
Idioma: sirve para indicar el idioma de tu aplicación. El idioma
predeterminado es el inglés de EE.UU. La lista de idiomas irá aumentando a medida que los dispositivos con la tecnología de Android estén disponibles en más idiomas. Asimismo, se puede incluir traducciones del nombre y de la descripción de la aplicación para promocionarla para usuarios que hablen otros idiomas. Las traducciones se mostrarán en Google Play.
Nombre: es el nombre de tu aplicación tal como te gustaría que apareciera en Google Play. Se puede añadir un nombre por idioma.
Descripción: es la descripción de tu aplicación que se verá en Google Play. Utiliza la función de traducción para traducir la descripción de tu aplicación a otros idiomas. En este campo, puedes utilizar un máximo de 4.000
caracteres.
Cambios recientes: la función de cambios recientes ofrece la oportunidad de
añadir notas sobre los cambios específicos de la versión más reciente de tu aplicación. Se utilizara el campo de cambios recientes para informar a tus usuarios sobre los cambios que has hecho en la aplicación. Más información sobre la función de cambios recientes
Texto promocional: es el texto situado junto al gráfico promocional en lugares destacados de Google Play.
Tipo de aplicación: Google Play se divide en dos tipos principales de aplicaciones: Aplicaciones y Juegos.
Categoría: Se debe elegir una categoría para la aplicación. Consulta más información sobre las categorías.
Opciones de publicación
Ubicaciones:
Son las ubicaciones en las que se puede distribuir tus aplicaciones. No todas las ubicaciones de la lista actual tienen usuarios con dispositivos con la tecnología de Android.
Se puede seleccionar ubicaciones de forma individual o la opción Todas las ubicaciones actuales y futuras. Esta opción significa que se añadirán más ubicaciones de distribución a medida que las vayamos habilitando para la aplicación.
Nota: en este momento, solo puedes vender aplicaciones a usuarios que se
Información de contacto
Se debe seleccionar un canal de asistencia para tu aplicación (por ejemplo, sitio web, correo electrónico o teléfono).
Los usuarios de Google Play verán esta información. Se puede seleccionar varios canales de asistencia.
3.1.3.1.3 Base de datos
Para la realización de este proyecto hemos implementado una pequeña base de datos donde iremos almacenando todos los registros que el usuario quiera que se tengan en cuenta mientras la aplicación está funcionando.
En Android tenemos la posibilidad de almacenar esta información de tres maneras distintas:
Preferencias Fichero
Base de datos SQLite
Decidimos utilizar el método de base de datos, ya que a nivel didáctico el uso de esta herramienta nos permite utilizar los conocimientos adquiridos durante la carrera y aplicarlos en un caso real.
3.1.3.1.4 SQLite
SQLite es una base de datos de código abierto. SQLite compatible con las funciones de base de datos relacionales estándar, como la sintaxis SQL, transacciones y declaraciones preparadas. La base de datos requiere poca memoria en tiempo de ejecución (aprox. 250 Kb), que hace que sea un buen candidato a ser incorporado en otros tiempos de ejecución.
SQLite está integrado en todos los dispositivos Android. Utilizando una base de datos SQLite en Android no requiere un procedimiento de configuración o administración de la base de datos.
Sólo se tiene que definir las instrucciones SQL para crear y actualizar la base de datos.
El acceso a una base de datos SQLite implica el acceso al sistema de archivos. Esto puede ser lento. Por lo tanto, se recomienda llevar a cabo las
operaciones de base de datos de forma asíncrona.
3.1.3.1.5 Estructura Base de datos
En nuestra base de datos vamos a crear una tabla de nombre “datos” donde almacenaremos los siguientes datos:
Código Descripción Acción Estado Frase
La base de datos se crea la primera vez que se lanza la aplicación, carga los datos desde un fichero de texto y queda instalada con todos los valores por defecto.
Vamos a crear una tabla simple sin clave primaria, ya que en SQLite para Android esto no pude ser implementado y además la complejidad de esta base de datos no lo requiere.
Dentro de la aplicación tenemos la posibilidad de añadir nuevos registros, actualizar, modificar y borrar.