Diccionario Traductor con Juego para memorizar - Análisis sobre APPS

November 23, 2017 | Author: xackobo | Category: Android (Operating System), Mobile App, Representational State Transfer, Google, Translations
Share Embed Donate


Short Description

Descripción: Proyecto final de carrea de Ing. T. en Informática de Gestión donde hago un análisis tanto de desarrollo co...

Description

I

Índice de contenidos 1   Antecedentes y estudio teórico ...................................................................... 1   1.1   Diccionarios de traducción en Android Marquet ................................................ 2   1.1.1  

Español Traductor / Diccionario ............................................................................ 2  

1.1.2  

Traductor de Google ............................................................................................... 3  

1.1.3  

Translate ................................................................................................................. 3  

1.1.4  

Inglés Traductor ..................................................................................................... 4  

1.1.5  

El traductor de viaje ............................................................................................... 4  

1.2   Servicios de traducción en Internet ....................................................................... 5   1.2.1  

Google Translate .................................................................................................... 5  

1.2.2  

WordReference.com ............................................................................................... 6  

1.2.3  

Apertium ................................................................................................................. 9  

1.2.4  

Bing Translator:...................................................................................................... 9  

1.2.5  

Yahoo babel fish: ................................................................................................. 10  

1.3   Sistema Operativo Android ................................................................................. 12   1.3.1  

Kernel de Linux .................................................................................................... 13  

1.3.2  

Librerías ............................................................................................................... 13  

1.3.3  

Application Framework ........................................................................................ 13  

1.3.4  

Aplicaciones Android ........................................................................................... 14  

1.4   Modelos de negocio con aplicaciones móviles..................................................... 17   1.4.1  

Venta directa en el Market ................................................................................... 17  

1.4.2  

Publicidad ............................................................................................................. 18  

1.4.3  

Servicios ............................................................................................................... 21  

1.4.4  

Ventas IN-APP ..................................................................................................... 22  

1.5   Descripción de la aplicación ................................................................................. 23   1.5.1  

Inicio/Buscador .................................................................................................... 23  

1.5.2  

Juego GameTest ................................................................................................... 24  

1.5.3  

Histrial palabras buscadas .................................................................................... 25  

1.5.4  

Palabras problemáticas ......................................................................................... 26  

1.5.5  

Configuración ....................................................................................................... 27  

2   Análisis .......................................................................................................... 27   2.1   Casos de Uso .......................................................................................................... 27  

II

2.1.1  

Buscar palabra a traducir ......................................................................................28  

2.1.2  

Juego1 (test) ..........................................................................................................28  

2.1.3  

Ver lista de palabras problemáticas ......................................................................29  

2.1.4  

Ver lista de palabras buscadas ..............................................................................29  

2.1.5  

Configurar idioma nativo......................................................................................30  

2.1.6  

Configurar idioma a aprender ...............................................................................30  

2.2   Modelo ................................................................................................................... 31   2.2.1  

Base de datos ........................................................................................................31  

2.2.2  

Clases del modelo .................................................................................................31  

2.2.3  

Clases de persistencia ...........................................................................................32  

2.3   Diagrama de estados ............................................................................................. 33   2.4   Diagramas de secuencia ....................................................................................... 35   2.4.1  

Home/Search ........................................................................................................35  

2.4.2  

Juego 1: GameTest ...............................................................................................36  

2.4.3  

“BadWordsList” Lista de palabras por aprender ..................................................37  

2.4.4  

Diccionario o lista de palabras buscadas ..............................................................37  

3   Desarrollo de la aplicación .......................................................................... 39   3.1   AndroidManifest.xml ........................................................................................... 39   3.2   Gestión de datos .................................................................................................... 41   3.2.1  

Content Providers .................................................................................................41  

3.2.2  

SQLite - DatabaseHandler.java ............................................................................42  

3.3   Clase WordReference.java .................................................................................. 47   3.3.1  

Atributos de la clase .............................................................................................47  

3.3.2  

Métodos de la clase WordReference ....................................................................49  

3.4   Pantallas de la aplicación ..................................................................................... 54   3.4.1  

Inicio / Buscador ...................................................................................................55  

3.4.2  

Juego 1: GameTest ...............................................................................................57  

3.4.3  

Historial y lista palabras a aprender .....................................................................61  

3.4.4  

Configuración .......................................................................................................68  

3.5   Menú y navegación de la aplicación .................................................................... 70  

4   Verificación y pruebas ................................................................................. 73   4.1   Protocolo de pruebas de la aplicación................................................................. 73   4.1.1  

Definición de la prueba.........................................................................................73  

4.1.2  

Resultados obtenidos ............................................................................................74  

III

4.2   Google Analytics para Android ........................................................................... 74   4.2.1  

Instalación ............................................................................................................ 75  

4.2.2  

Resultados obtenidos ............................................................................................ 79  

4.3   Puesta producción ................................................................................................. 81   4.3.1  

Creación del archivo APK firmado ...................................................................... 81  

4.3.2  

Subida al Market (Google Play) ........................................................................... 84  

5   Estudio económico ....................................................................................... 87   5.1   Materiales .............................................................................................................. 87   5.2   Horas de ingeniería ............................................................................................... 88   5.3   Horas de desarrollo ............................................................................................... 89   5.4   Rentabilidad .......................................................................................................... 89   5.4.1  

Escenarios de rentabilidad por publicidad: .......................................................... 90  

5.4.2  

Escenarios de rentabilidad de venta: .................................................................... 93  

5.5   Resumen y conclusión económica ........................................................................ 94  

6   Conclusiones ................................................................................................. 95   7   Ampliaciones y mejoras .............................................................................. 97   8   Bibliografía ................................................................................................... 99   9   Contenido del CD ....................................................................................... 101  

IV

V

Índice de ilustraciones Ilustración 1 - Translator Dictionary .................................................................................... 2   Ilustración 2 Google Translate ............................................................................................. 3   Ilustración 3 Translate .......................................................................................................... 3   Ilustración 4 Ingles Traductor............................................................................................... 4   Ilustración 5 - Captura de "el traductor de viaje" ................................................................ 4   Ilustración 6 Captura de pantalla de Google Translate ....................................................... 5   Ilustración 7 Proceso de obtención de la API de WordReference.com................................. 7   Ilustración 8 Captura pantalla Apertium .............................................................................. 9   Ilustración 9 - Captura Bing Translator ............................................................................... 9   Ilustración 10 Precio Packs API Bing Translator .............................................................. 10   Ilustración 11 - Captura de pantalla de Babel fish ............................................................. 11   Ilustración 12 - Proceso de ejecución de una aplicación Android ..................................... 15   Ilustración 13 Ejemplo de aplicaciones orientadas a venta ............................................... 18   Ilustración 14 Ejemplos de aplicaciones gratuitas ............................................................. 19   Ilustración 15 Portada de AdMob.com ............................................................................... 18   Ilustración 16 Plataforma AdMob.com ............................................................................... 19   Ilustración 17 Gestión de campañas de publicidad en AdMob ........................................... 19   Ilustración 18 - Capturas de la aplicación oficial de Facebook ......................................... 20   Ilustración 19 - Captura juego "little empire" .................................................................... 21  

VI

Ilustración 20 Diagrama de clases del modelo ................................................................... 31   Ilustración 21 Diagrama de estados de una palabra .......................................................... 36   Ilustración 22 Diagrama de secuencia traducción ............................................................. 35   Ilustración 23 Diagrama de secuencia del juego GameTest .............................................. 36   Ilustración 24 Diagrama de secuencia de lista de palabras a aprender ............................ 37   Ilustración 25 Diagrama de secuencia de lista de palabras buscadas ............................... 37   Ilustración 26 Pantalla inicial de la aplicación.................................................................. 57   Ilustración 27 Pantalla GameTest ...................................................................................... 59   Ilustración 28 Pantallas: Historial y lista de palabras a aprender .................................... 63   Ilustración 29 Pantalla de configuración ........................................................................... 70   Ilustración 30 Proceso instalación Google Analytics -Alta ................................................ 75   Ilustración 31 Google Analytics - Visitas/mes .................................................................... 79   Ilustración 32 Google Analytics - Resumen mes ................................................................. 80   Ilustración 33 Google Analytics - Pantallas visitadas ........................................................ 80   Ilustración 34 Creación .apk firmado 1 ............................................................................ 102   Ilustración 35 Creación .apk firmado 2 ............................................................................ 102   Ilustración 36 Creación .apk firmado 3 ............................................................................ 102   Ilustración 37 Creación .apk firmado 4 ............................................................................ 103   Ilustración 38 Creación .apk firmado 5 ............................................................................ 103   Ilustración 39 Alta en Market 1 ........................................................................................ 104   Ilustración 40 Alta en Market 2 ........................................................................................ 104  

VII

Ilustración 42 Alta en Market 4........................................................................................... 85   Ilustración 41 Alta en Market 3......................................................................................... 105  

VIII

IX

Índice de tablas Tabla 1: Tabla resultados prueba aplicación ........................................................................... 74 Tabla 2 - Materiales necesitados para el desarrollo del proyecto ........................................... 87 Tabla 3 - Detalle horas de ingeniería dedicadas ...................................................................... 88 Tabla 4 - Definición horas de desarrollo .................................................................................. 89 Tabla 5 - Escenario publicidad 1 .............................................................................................. 91 Tabla 6 - Escenario de publicidad 2 ......................................................................................... 92 Tabla 7 - Escenario de rentabilidad de venta ........................................................................... 93 Tabla 8 - Resumen costes proyecto ........................................................................................... 94

X

1 - Antecedentes y estudio teórico

1

1 Antecedentes y estudio teórico Una de las circunstancias generadas por la evolución de la telefonía móvil a telefonía móvil inteligente (Smartphone) es la aparición de aplicaciones desarrolladas por los propios usuarios y vendidas en “Market” o tiendas de venta que ofrecen las distintas plataformas (Android, Apple, Windows Mobile,...). Esto genera un estado de innovación constante ya que cada plataforma pasa a poseer miles de desarrolladores que generan nuevas funcionalidades o aplicaciones a diario. De estas aplicaciones, una de las áreas en las que más hincapié se hace es en la de educación. Gracias a la gran cantidad de servicios disponibles en Internet para realizar traducciones y a la necesidad cada vez más acuciante de poder comunicarse con gente en otros idiomas, las aplicaciones orientadas a mejorar un idioma o un vocabulario desconocido están a la orden del día. De estas aplicaciones se pueden encontrar principalmente de dos tipos, los diccionarios de traducción y las puramente educativas. Por lo que hace a las de traducción, aparecen diccionarios online que se basan en servicios gratuitos, diccionarios offline a partir de un diccionario incluido en la propia aplicación y ambas, que obtienen la traducción de las palabras buscadas por el usuario a partir de un servicio de Internet o API. Esta traducción la almacena en la aplicación generando así un diccionario offline a partir de las palabras buscadas. En cambio en las educativas, la aplicación ofrece al usuario únicamente una serie de herramientas multimedia con las que aprender el idioma o vocabulario. La ventaja de estas aplicaciones es que el hecho de ser interactivas facilitan la memorización del temario, pero la principal desventaja, es que dicho temario en la mayoría de casos no es dinámico ni se ajusta a las necesidades del usuario. Este proyecto, estaría más cerca del primer grupo que del segundo, ya que lo que se pretende realizar es una aplicación de traducción en el que el usuario realizaría traducciones a través de una servicio de búsqueda incluida en la aplicación.

2

Diccionario traductor Android para aprender idiomas

Dicha traducción se almacenará en la propia aplicación con dos objetivos, el primero, como ya se ha comentado, es ofrecer la posibilidad de tener un diccionario offline y el segundo es a partir de las palabras buscadas por el usuario, ofrecer una serie de juegos con los que memorizar las palabras buscadas, las cuales se podrán considerar un temario dinámico ajustado a las necesidades de cada usuario.

1.1 Diccionarios de traducción en Android Marquet Como se ha visto en el punto anterior, dentro del campo de los diccionarios de traducción hay principalmente dos tipos: las herramientas de traducción, tales como diccionarios (online y offline), y las herramientas de e-learning centradas en aprendizaje de idiomas. En cuanto a las aplicaciones de traducción, en el momento del estudio se han encontrado cerca de 1000 resultados. Como es inviable realizar un estudio de cada una de ellas y además se aleja del propósito de este proyecto, se han escogido 5 aplicaciones con características diferentes para analizar, a parte de su funcionamiento básico, la puntuación y el número de instalaciones de estas aplicaciones. Con ello se pretende predecir los resultados que se obtendrán en el lanzamiento de la aplicación que se está realizando. 1.1.1 Español Traductor / Diccionario Número de votos: 32.317

Puntuación: 4,5/5

Instalaciones: 1-5 M

Diccionario traductor de Inglés a Español y de Español a Inglés que permite, además de buscar palabras, traducir los SMS y e-mails entrantes al idioma deseado, copiar y pegar la traducción a otra aplicación y historial de traducción. Precio: Versión gratuita + publicidad & Pro (2,49€)

Ilustración 1 - Translator Dictionary

3

1 - Antecedentes y estudio teórico

1.1.2

Traductor de Google

Número de votos: 168.573

Puntuación: 4,6/5

Instalaciones: 10-50M

Esta aplicación es la nativa para Android de Google Translate. Tiene capacidad para traducir frases a más de 60 idiomas, traducir por voz, reproducir las traducciones en audio, destacar traducciones favoritas para acceder a ellas rápidamente incluso sin conexión, acceder al historial de traducciones sin conexión, realizar traducciones de idiomas con alfabeto diferente al latino (pinyin, japonés, etc...) para poder leerlos fonéticamente. Precio: Gratis Ilustración 2 Google Translate

1.1.3 Translate Número de votos: 6.511

Puntuación: 4,2

Instalaciones: 0,5-1M

Aplicación que utiliza la Api de Google Translate para traducir entre más de 150 parejas de idiomas. En su última versión requiere el acceso a los contactos del usuario para permitirle enviar por email o SMS las traducciones.

Precio: Gratis Ilustración 3 Translate

4

Diccionario traductor Android para aprender idiomas

1.1.4 Inglés Traductor Número de votos: 1.290

Puntuación: 4,1

Instalaciones: 0,5-1M

Aplicación de diccionario sencilla que permite la traducción de Inglés a Español y viceversa, la entrada por voz, reproducir las traducciones a audio y enviar las traducciones por email, SMS, Twitter y/o Facebook.

Precio: Gratis Ilustración 4 Ingles Traductor

1.1.5 El traductor de viaje Número de votos: 129

Puntuación:4,1

Instalaciones:5.000-10.000

Manual de conversación ilustrado y parlante que traduce palabras y expresiones españolas a 29 idiomas. Los contenidos están divididos en áreas temáticas que permiten al usuario encontrar las frases apropiadas a cada situación de la manera más rápida y eficaz. Además cuenta con un buscador para realizar las consultas rápidamente.

Ilustración 5 - Captura de "el traductor de viaje"

Precio: Gratis

1 - Antecedentes y estudio teórico

5

1.2 Servicios de traducción en Internet Para el desarrollo del proyecto es necesario utilizar un servicio externo que a partir de una palabra dada retorne la traducción de la misma y, a ser posible, cualquier otro tipo de información relacionada con la palabra original o la traducida. Para ello se han estudiado los principales servicios existentes en Internet y de cada uno se ha extraído su funcionamiento y las condiciones que impone.

1.2.1

Google Translate

Google Translate es quizás la plataforma de traducción más conocida y con más funcionalidades que existe, además del entorno sencillo de traducción en el que el usuario puede traducir textos, sugerir traducciones, reproducir los textos originales y los traducidos en cualquier idioma.

Ilustración 6 Captura de pantalla de Google Translate

Hay que destacar que Google Translate ofrece al usuario otras prestaciones como: la traducción de documentos, la creación de un glosario personalizado, la posibilidad de traducción instantánea a través del chat Google Talk, etc... Todas ellas de uso gratuito inicialmente pero con ciertas limitaciones. Además, ofrece al usuario la posibilidad de modificar la traducción presentada para re-alimentar la base desde la que se generan las traducciones.

6

Diccionario traductor Android para aprender idiomas

En cuanto a APIs de desarrollo, hasta el 26 de mayo de 2011, se podía acceder a una versión gratuita y de fácil uso que permitía, entre otras funcionalidades, convertir la una web en multi-idioma con muy poco trabajo. Esto generó un uso excesivo y quizás incorrecto de esta API lo que provocó que dejara de ofrecerse de manera gratuita. La versión V2 de la API de Google Translate, sólo está disponible como versión de pago, con un precio de 20$ por cada millón de caracteres traducidos.

En este caso, la

comunicación entre servidor (API) y aplicación (cliente) se puede realizar con JSON y se trabaja sobre protocolo REST1.

1.2.2 WordReference.com WordReference es un diccionario de traducción en línea con el que se pueden trabajar los siguientes pares: Inglés-Francés, Inglés-Italiano, Inglés-Español, Francés-Español, Español-Portugués e Inglés-Portugués, y también desde junio de 2009 Inglés-Alemán, Inglés-Ruso, Inglés-Polaco, Inglés-Rumano, Inglés-Checo, Inglés-Griego, Inglés-Turco, Inglés-Chino, Inglés-Japonés, Inglés-Coreano e Inglés-Árabe, a pesar que algunos de estos pares aún se encuentran en proceso de implementación. A parte del diccionario de traducción, este sitio web cuenta con una sección de foros en la cual el usuario registrado puede realizar preguntas de vocabulario y gramática. La API que ofrece esta web, se puede realizar a través de una solicitud asíncrona en la que se incluye el par de idiomas con que se quiere trabajar y el texto a traducir, retorna un objeto JSON con los resultados de la petición. O también casi de la misma manera pero con un retorno en formato HTML.

1

REST es una técnica de arquitectura del software para sistemas hipermedia distribuidos como Internet. Se

usa en el sentido más amplio para describir cualquier interfaz web simple que utiliza XML y HTTP, sin las abstracciones adicionales de los protocolos basados en patrones de intercambio de mensajes como el protocolo de servicios web SOAP.

1 - Antecedentes y estudio teórico

7

En ambos casos, se ha de generar una URL donde realizar la petición que ha de seguir este patrón: Para HTML: http://api.wordreference.com/{version}/{API_key}/{dictionary}/{term} Para JSON: http://api.wordreference.com/{version}/{API_key}/json/{dictionary}/{term} Siendo: versión: el número de versión con el que se trabaja, actualmente 0.8. api_key: Es un identificador que proporciona WordReference para poder trabajar con su API. Para solicitarlo es necesario acceder a la página de registro de WordReference en: (http://www.wordreference.com/docs/APIregistration.aspx) donde se ha de rellenar un formulario y a continuación proporcionan una api_key con la que se puede trabajar.

Ilustración 7 Proceso de obtención de la API de WordReference.com

dictionary: Con este parámetro se define el par de idiomas de los comentados anteriormente con el que se quiere trabajar. Dicho par se establece con la abreviatura de los nombres de los dos idiomas en estándar ISO sin espacio de separación y en minúsculas. Así traducir de Español a Inglés sería “esen”, de Inglés a Francés “enfr”, etc...

8

Diccionario traductor Android para aprender idiomas

Actualmente la API del par Español-Ingles, se encuentra en desarrollo, y Wordreference espera tenerla publicada para primavera de 2012. term: Este parámetro contiene la palabra a traducir. Con todo lo anterior, si se quisiera traducir la palabra “dog” de inglés a francés, se generarían las URLs: http://api.wordreference.com/0.8/96ee3/enfr/dog para HTML y http://api.wordreference.com/0.8/96ee3/json/enfr/dog para JSON.

HTML

JSON {   "term0"  :  {   "PrincipalTranslations"  :  {    

"0"  :{  

 

 

"OriginalTerm"  :  {  "term"  :  

"dog",  "POS"  :  "n",  "sense"  :  "pet",   "usage"  :  ""},      

 

"FirstTranslation"  :  {"term"  

:  "chien",  "POS"  :  "nm",  "sense"  :  ""},   "Note"  :  ""},    

[...]    

 

 

"FirstTranslation"  :  {"term"  

:  "tracasser",  "POS"  :  "vtr",  "sense"  :   ""},  "Note"  :  ""}},   "AdditionalTranslations"  :  {    

"0"  :{  

 

 

"OriginalTerm"  :  {  "term"  :  

"dog",  "POS"  :  "n",  "sense"  :  "canis   familiaris",  "usage"  :  ""},      

 

"FirstTranslation"  :  {"term"  

:  "chien",  "POS"  :  "nm",  "sense"  :  ""},   "Note"  :  ""},     [...]  

9

1 - Antecedentes y estudio teórico

1.2.3

Apertium http://www.apertium.org/ Apertium, es una plataforma de

traducción

de

código

abierto, desarrollada por la empresa

Prompsit

en

con

la

colaboración

Universidad de Alicante, la Generalitat de Catalunya, el Ilustración 8 Captura pantalla Apertium

Ministerio

de

Asuntos

Exteriores de Rumania y el Ministerio Turismo

de y

Industria,

Comercio

de

España. En esta plataforma se puede encontrar una sencilla herramienta de traducción online que permite escoger el par de idiomas a traducir (origen-destino) y la caja del texto a traducir.

1.2.4

Bing Translator:

Este es el traductor ofrecido por Microsoft dentro de su plataforma online Bing para hacer competencia al de Google. En su aplicación web se puede encontrar un formulario similar al de Google Translate con el cual, el usuario puede realizar traducciones de manera muy similar al ya comentado.

10

Diccionario traductor Android para aprender idiomas

Además, igual que en el caso de Google Translate, ofrece una serie de herramientas para el desarrollo de aplicaciones y páginas web, aplicaciones móviles, etc…y al igual que el anterior, esta API tiene un coste, que no va en función de caracteres traducidos, sino que se calcula en función de las traducciones realizadas, y se vende por packs:

Ilustración 10 Precio Packs API Bing Translator

1.2.5 Yahoo babel fish: Otro de los servicios de traducción online más importantes que existe, y quizás uno de los más utilizados junto con el de Google, es el servicio de la empresa Yahoo.

1 - Antecedentes y estudio teórico

11

Esta empresa en sus inicios se orientó a público americano y latino pero actualmente, es una de las empresas de su sector con más éxito en Asia. Es por ello que este servicio también está orientado a público asiático a pesar de que la plataforma sea multilenguaje.

Ilustración 11 - Captura de pantalla de Babel fish

Esta herramienta, a diferencia de las anteriores, no incluye una API para desarrolladores propia, sino que dicha API está incluida dentro del pack que ofrece Yahoo, conocido como YDN (Yahoo Developer Network) conocida como R3. R3, es una herramienta OpenSource, bajo licencia FreeBSD, para mantener y desarrollar variantes de páginas webs creando, gestionando y localizando plantillas y traducciones. Esto se puede hacer utilizando la línea de comandos o entorno web, con lo que se generan archivos de texto para utilizarlos en aplicaciones internacionalizadas.

12

Diccionario traductor Android para aprender idiomas

Al ser una herramienta OpenSource, el precio por traducción es gratuito, pero la desventaja de este servicio es que no se puede utilizar en aplicaciones real time, en entorno móvil, ya que todas las traducciones dependen unos archivos generados que una vez obtenidos se pueden incluir en la configuración de la aplicación.

1.3 Sistema Operativo Android Este es un sistema operativo orientado a dispositivos móviles tales como tabletas, smartphones... Fue inicialmente desarrollado por la empresa Android Inc, que en 2005 fue comprada por Google y actualmente es el principal producto de la Open Handset Alliance, un conglomerado de fabricantes y desarrolladores de hardware, software y operadores de servicio. La arquitectura de este sistema operativo, está distribuida en varias capas, cada una de ellas tiene sus propias características y propósito. Estas capas son: Aplicaciones, Marco de trabajo de las aplicaciones, Bibliotecas, Runtime de Android y Núcleo Linux.

1 - Antecedentes y estudio teórico

1.3.1

13

Kernel de Linux

Linux es un sistema de alta seguridad que ha sido probado y testeado en múltiples entornos desde hace décadas. Es por ello que Android ha escogido Linux como base para su sistema operativo. A pesar de todo, las aplicaciones de Android se ejecutan de manera independiente de los procesos Linux que corren en el sistema.

1.3.2

Librerías

Las librerías nativas de Android, son en su mayoría programadas en C/C++ y a menudo vienen de la comunidad OpenSource con la intención de ofrecer los servicios necesarios para la capa de aplicación de Android. Entre otros, incluye: •

WebKit, para el renderizado web que utilizan los navegadores como chrome, Safari,…



SQLlite, un sistema completamente funcional de base de datos SQL.



Apache Harmony, una implementación OpenSource de Java.



OpenGL, un paquete de librerías de gráficos 3D.



OpenSSL, una librería para la conexión y navegación en Internet de manera segura.

1.3.3

Application Framework

El Application Framework, es un entorno de desarrollo que provee de numerosos servicios para ayudar al desarrollador. Esta es la parte de la plataforma con mayor y mejor documentación ya que es a partir de las herramientas aquí proporcionadas con las que el

14

Diccionario traductor Android para aprender idiomas

desarrollador puede explotar su creatividad y así lanzar cada día las nuevas funcionalidades o aplicaciones que se han comentado anteriormente. Precisamente en esta capa se pueden encontrar múltiples librerías en Java especialmente creadas para Android, además se pueden encontrar “services” que permiten a la aplicación hacer uso de funcionalidades del Smartphone, tales como sensores, WiFi, servicio telefónico, acceso a información de otras aplicaciones,… 1.3.4 Aplicaciones Android Y por último, la capa de aplicaciones en Android. Estas aplicaciones se desarrollan habitualmente en lenguaje Java junto con Android Software Development Kit (Android SDK), pero es posible desarrollar con otras herramientas como el Kit de Desarrollo Nativo para aplicaciones o extensiones en C y C++ o Google App Inventor. Las aplicaciones a su vez se encuentran distribuidas en Activities, que hacen referencia a los casos de uso de la aplicación. Es decir, se podrían definir las activities como cada una de las pantallas de una aplicación. Para entender la navegación dentro de una aplicación en Android, cabe definir la diferencia entre Intent y Activity. Las Activities, como ya se ha comentado, son básicamente las pantallas de las que se compone una aplicación. Los Intents, son la manera de invocar estas activities. La definición breve de la documentación es: “Un intent es la descripción abstracta de una operación que se va a llevar a cabo”. O dicho de otro modo, un intent es una clase que permite especificar una Activity a ejecutar, llamando a uno de los métodos de la clase Activity con ese Intent de parámetro. Cuando una activity es ejecutada, dentro de ésta hay un proceso de ejecución que es imprescindible conoce para el desarrollo de cualquier aplicación. Ya que con éste se puede definir que métodos se ejecutarán la primera vez que se instancie una pantalla, cuales se pueden mantener en ejecución en segundo plano cuando una aplicación esté pausada o cuales se ejecutarán cuando el usuario vuelva a una pantalla ya instanciada.

1 - Antecedentes y estudio teórico

15

16

Diccionario traductor Android para aprender idiomas

Ilustración 12 - Proceso de ejecución de una aplicación Android

1 - Antecedentes y estudio teórico

17

1.4 Modelos de negocio con aplicaciones móviles En el mundo de las aplicaciones móviles, se pueden encontrar muchas opciones en cuanto a modelos de negocio. Es, por tanto, muy difícil definir todos ellos ya que además algunos se pueden considerar incluso irrelevantes al estar muy ligado a una aplicación en concreto. Una de las consecuencias de la aparición a posteriori de las otras plataformas de aplicaciones móviles (Market), es el hecho de que para ganar público en estos entornos se ha tenido que ofrecer las aplicaciones a precios más bajos que en el caso de App Store e incluso en algunos casos ya no se ofrece la versión de pago fuera de este entorno. Es por ello que se han seleccionado los cuatro modelos de negocio que generan más ingresos en el mundo de las aplicaciones móviles. Además, en el caso de este proyecto, al ser orientado únicamente al mercado Android, únicamente se van analizar estos modelos dentro de este mercado.

1.4.1

Venta directa en el Market

Este es el modelo de negocio más expandido sobretodo en el mercado de aplicaciones para iPhone ya que es un mercado más acostumbrado a comprar dentro de “App Store”. A pesar de ello, es un modelo con mucho sentido sobretodo para aplicaciones exclusivas y de difícil competencia. Una opción común a este modelo, es el hecho de publicar una aplicación limitada con o sin publicidad de manera gratuita. En ésta, si el usuario quiere obtener las funcionalidades extra tiene que comprar la versión de pago.

18

Diccionario traductor Android para aprender idiomas

Ilustración 13 Ejemplo de aplicaciones orientadas a venta

Como se puede observar en la imagen anterior, los precios dentro de las aplicaciones de pago, pueden variar de céntimos de euro como la primera (0,76€), hasta por ejemplo la aplicación DocumentsToGo Full Version que tiene un precio de 11,59€.

1.4.2 Publicidad Este modelo, es quizás el más utilizado de los que se van a comentar. En este caso, se trata normalmente de publicar una aplicación de manera gratuita, en la que en diferentes momentos aparece un banner publicitario anunciando normalmente otras aplicaciones o algún producto que por perfil de usuario, a éste le pueda interesar. Es decir, la plataforma intenta recoger cuantos más datos mejor del usuario que está utilizando una aplicación y de este modo ofrecerle productos y/o servicios que le puedan interesar.

19

1 - Antecedentes y estudio teórico

Ilustración 14 Ejemplos de aplicaciones gratuitas

Para poder añadir publicidad a una aplicación, se hace normalmente mediante una plataforma intermedia que se encarga de localizar por un lado a los anunciantes y por el otro a los desarrolladores para poner la publicidad de los primeros en las aplicaciones de los segundos y cobrando un porcentaje por la gestión. AdMob Esta

plataforma

es

de

todas

las

relacionadas con Android para la gestión de publicidad en aplicaciones móviles, la más conocida. Además, fue una de las primeras en aparecer y ha sido comprada por Google en 2009. Para gestionar la publicidad con esta plataforma, el desarrollador tiene que incluir una librería dentro de su proyecto y definir con la API que ofrece donde y Ilustración 15 Portada de AdMob.com

20

Diccionario traductor Android para aprender idiomas

cuando va a aparecer la publicidad dentro de la aplicación. De

cara

al

anunciante,

una

vez dentro de la plataforma

se

encuentra en un entorno

sencillo

con el que dar de alta una campaña y gestionarla. Ilustración 16 Plataforma AdMob.com

Ilustración 17 Gestión de campañas de publicidad en AdMob

21

1 - Antecedentes y estudio teórico

iAd Otra de las plataformas más reconocidas en cuanto a publicación de anuncios en aplicaciones móviles, se llama iAd. Esta

es

la

publicitaria

plataforma nativa

de

Apple, en la que de la misma

forma

anterior,

se

entorno

que

la

ofrece

un para

desarrolladores y otro para anunciantes. La limitación de esta plataforma es el hecho de que es únicamente para aplicaciones iPhone/iPod/iPad, por lo que no va a ser más comentado en este proyecto.

1.4.3

Servicios

Otro de los modelos de negocio alrededor de las aplicaciones móviles, se basa en que la aplicación no sea el centro del propio modelo, sino que sirva como soporte al mismo. Es decir, en este caso, el desarrollador o empresa que crea la aplicación, tiene un modelo de negocio ya montado o lo quiere montar en el cual, la aplicación es simplemente una herramienta de soporte para el mismo.

Ilustración 18 - Capturas de la aplicación oficial de Facebook

22

Diccionario traductor Android para aprender idiomas

En este caso, destacan las aplicaciones relacionadas con las redes sociales, como podría ser la aplicación oficial de Facebook, en la que el modelo de negocio no se encuentra ni en la venta de la aplicación, ni en poner publicidad en la misma, sino que es un modelo de negocio externo a la aplicación y ésta únicamente hace de soporte a la plataforma original.

1.4.4 Ventas IN-APP Por último el modelo de negocio que más ingresos está dando actualmente, y es el de las ventas IN-APP, es decir, dentro de la aplicación. En este caso, el desarrollador o empresa desarrolladora define, en la mayoría de los casos, una moneda imaginaria u objeto de intercambio que se puede comprar con dinero real. Y a continuación, el usuario puede utilizar este dinero imaginario para comprar objetos o servicios dentro de la aplicación. Esto ocurre sobretodo en juegos en los que el usuario si quiere puede evolucionar a los personajes más rápidamente de lo normal, puede hacerlo comprando elementos que por la definición del juego tardaría más en obtener. Un claro ejemplo de este modelo de negocio, es el juego “Little Empire”. Este es un sencillo juego de rol, en el cual el usuario se crea un reino y lo tiene

que

hacer

crecer

invadiendo reinos vecinos y protegerse Ilustración 19 - Captura juego "little empire"

de

invasiones

vecinas también.

En este juego, el usuario puede comprar unos objetos llamados “mojos” con los que puede comprar armas y armaduras a su “Héroe” dentro del juego.

23

1 - Antecedentes y estudio teórico

1.5 Descripción de la aplicación Previamente al desarrollo o al diseño de la aplicación, se ha decidido realizar una serie de maquetas a modo de boceto (mockups) en las que únicamente se tratará la funcionalidad de cada pantalla. De este modo se centra el proyecto en cuales son los elementos mínimos a desarrollar en cada pantalla.

1.5.1

Inicio/Buscador La pantalla principal de la aplicación se define como el buscador, de manera que el usuario al cargar la aplicación, puede realizar búsquedas de manera rápida y cómoda. De este modo se pretende conseguir que se hagan muchas búsquedas con la aplicación y así poder ofrecer al usuario más variedad en los juegos. Por tanto, en esta pantalla aparecen los elementos: Par de idiomas: Donde aparece el idioma original en que se realiza la búsqueda y el idioma de destino en el que se mostrará la respuesta. Palabra a buscar: Es un campo de texto en el que el usuario al clicar con el dedo encima le aparecerá el teclado y a continuación podrá escribir una palabra.

Botón buscar: Con este botón, el usuario activa la búsqueda en caso de que haya alguna palabra escrita en el campo anterior. Resultado: En este campo, se muestra la palabra una vez traducida, si no se encuentra ningún a traducción para dicha palabra, mostraría un mensaje de error.

24

Diccionario traductor Android para aprender idiomas

1.5.2 Juego GameTest Inicialmente se define un solo juego base para trabajar con las principales características que se quieren tratar con el usuario: Ofrecerle una palabra de las consideradas no conocidas o a memorizar y si se resuelve correctamente el ejercicio se resta 1 en el atributo numCheck de la palabra. En este caso se ofrece una palabra al azar de entre las palabras erróneas y 5 posibles respuestas también de entre las erróneas. El usuario tiene que escoger la respuesta correcta. Cuando una palabra alcanza 0 en el atributo numCheck, aparece un mensaje diciendo que la palabra se considera como aprendida hasta que se vuelva a buscar. Por tanto, en esta pantalla existen los siguientes elementos: Palabra enunciada: Es la palabra sobre la que se realiza el ejercicio. Respuestas: Se muestran 5 posibles respuestas a la palabra inicial en forma de test, si el usuario selecciona la respuesta correcta, le aparece un mensaje de “correcto” automáticamente se reinicia el ejercicio con nuevos valores. En caso contrario se le muestra el mensaje de error.

25

1 - Antecedentes y estudio teórico

1.5.3

Histrial palabras buscadas En esta activity se ofrece al usuario un historial de palabras buscadas, la idea es que poco a poco pueda hacerse un diccionario personalizado con aquellas palabras con las que ha tenido dudas. Dicho historial estará disponible offline para poder acceder a él en cualquier momento y lugar. En este caso, solo se muestra una lista de palabras ordenadas alfabéticamente y con 4 datos en cada fila: Palabra original: Palabra que ha sido introducida en el buscador. Idioma

original:

Idioma

en

que

se

encuentra la palabra anterior. Palabra traducida: Es la palabra en el idioma una vez traducida. Idioma destino: Idioma en el que se obtiene la traducción anterior.

26

Diccionario traductor Android para aprender idiomas

1.5.4 Palabras problemáticas Esta activity es muy similar a la anterior, aunque se filtran únicamente las palabras con las que el usuario tiene problemas. De modo que pueda repasar esta lista y así mejorar su vocabulario. Por lo que se mantienen los 4 datos en cada fila: Palabra original: Palabra que ha sido introducida en el buscador. Idioma

original:

Idioma

en

que

se

encuentra la palabra anterior. Palabra traducida: Es la palabra en el idioma una vez traducida. Idioma destino: Idioma en el que se obtiene la traducción anterior.

27

1 - Antecedentes y estudio teórico

1.5.5

Configuración Por último, una pantalla que permita al usuario

configurar

diferentes

opciones

dentro de la aplicación. Dada la sencillez del juego y la aplicación en sí, no es necesario por

el

momento

tener

una

gran

configuración, por lo que en esta pantalla y por el momento, solo se puede editar el par de idiomas con los que se puede trabajar. Esta lista de pares de idiomas viene definida por la capacidad de WordReference en su API, que irá escalando progresivamente y así se podría ofrecer poco a poco más opciones a los usuarios.

2 - Análisis

27

2 Análisis A partir de lo documentado anteriormente, se define el proyecto como una aplicación en sistema operativo Android, en la que el usuario encontrará principalmente 5 funcionalidades a saber: traducir una palabra, jugar una partida a un juego a partir de palabras buscadas, ver lista de palabras buscadas, ver la lista de palabras no aprendidas, y configurar pareja de idiomas a utilizar.

2.1 Casos de Uso

28

Diccionario traductor Android para aprender idiomas

2.1.1 Buscar palabra a traducir Flujo inicial: - El usuario entra en la aplicación. - Presiona en el campo de texto de la pantalla con lo que le aparece un teclado. - Escribe la palabra a traducir y aprieta en el botón para solicitar la traducción de la palabra introducida. - La aplicación muestra dicha traducción. Flujo alternativo: - El usuario entra en la aplicación. - Presiona en el campo de texto de la pantalla con lo que le aparece un teclado. - Escribe la palabra a traducir y aprieta en el botón para solicitar la traducción de la palabra introducida. - La palabra buscada no existe o no se encuentra en el servicio utilizado. - La aplicación muestra el texto: “la traducción de la palabra ”+palabra+” no está disponible en este momento, verifique que está correctamente escrita”.

2.1.2 Juego1 (test) Flujo inicial: - El usuario entra en la Activity “Juego”. - Se muestra una palabra en idioma nativo o destino y 3 palabras en el idioma contrario. - El usuario selecciona la traducción correcta de la palabra propuesta. - Si la opción escogida es la traducción correcta de esta será marcada como acierto en la base de datos. A los 3 aciertos, esta palabra, será considerada como aprendida y no volverá a aparecer en el/los juegos de la aplicación. Flujo alternativo: - El usuario entra en la activity “Juego”. - Si no se ha realizado ninguna búsqueda o se todas las palabras de la base de datos han sido marcadas como aprendidas, se mostrará el texto “por favor realice alguna búsqueda”.

2 - Análisis

29

Precondiciones: - Haber realizado alguna búsqueda en la activity de búsqueda.

2.1.3

Ver lista de palabras problemáticas

Flujo inicial: - El usuario entra en esta activity y se le muestra una lista de todas las palabras buscadas que no hayan sido marcadas como aprendidas. - El usuario selecciona una palabra y aparece la traducción. Flujo alternativo: - Si no se ha realizado ninguna búsqueda o se todas las palabras de la base de datos han sido marcadas como aprendidas, se mostrará el texto “por favor realice alguna búsqueda”. Precondiciones: - Haber realizado alguna búsqueda en la activity de búsqueda.

2.1.4

Ver lista de palabras buscadas

Flujo inicial: - El usuario entra en esta activity y se le muestra una lista de todas las palabras buscadas. - El usuario selecciona una palabra y aparece la traducción. Flujo alternativo: - Si no se ha realizado ninguna búsqueda o se todas las palabras de la base de datos han sido marcadas como aprendidas, se mostrará el texto “por favor realice alguna búsqueda”. Precondiciones: - Haber realizado alguna búsqueda en la activity de búsqueda.

30

Diccionario traductor Android para aprender idiomas

2.1.5 Configurar idioma nativo Flujo inicial: - El usuario accede a la activity de configuración y selecciona la opción de idioma nativo - Se muestra un desplegable con las diferentes opciones a elegir. Flujo alternativo: - Si se produjese algún error durante el proceso, se mostrará un mensaje especificando el error.

2.1.6 Configurar idioma a aprender Flujo inicial: - El usuario accede a la activity de configuración y selecciona la opción de idioma a aprender - Se muestra un desplegable con las diferentes opciones a elegir. Flujo alternativo: - Si se produjese algún error durante el proceso, se mostrará un mensaje especificando el error.

31

2 - Análisis

2.2 Modelo En el desarrollo de este proyecto se pretende generar una base en la que a partir de una lista de palabras, que el usuario ha buscado su traducción de un idioma desconocido o en el que quiere ampliar su vocabulario a un idioma conocido, se le ofrezca uno o varios juegos con los que mejorar dicho vocabulario. 2.2.1

Base de datos

Dada la sencillez de la aplicación de este proyecto, su base de datos consta de una única tabla que hace referencia al elemento “palabra”. Donde sus registros están formados por: palabra original (word), palabra traducida (translated_word), idioma original (orig_lang), idioma de traducción (trans_lang) y número de veces que quedan para considerar una palabra como aprendida (numChecks).

2.2.2

Clases del modelo

Ilustración 20 Diagrama de clases del modelo

32

Diccionario traductor Android para aprender idiomas

El elemento más básico de la aplicación es una palabra (word), que está compuesta por su idioma original, en el que se busca origLang, palabra buscada word en el idioma original, idioma a traducir o de destino transLang, la palabra traducida translation, y por último el número de veces que le queda a una palabra para ser considerada como aprendida cuando el atributo numChecks es igual a 0 y se le suma 3 cada vez que una palabra es buscada.

2.2.3 Clases de persistencia A continuación se definen los dos elementos que hacen posible la gestión de las palabras y sus traducciones de esta aplicación, y son las clases DatabaseHandler y WordReference. DataBaseHandler Esta clase es la que realiza las gestiones relacionadas entre la base de datos y las “palabras”: •

Guardar una palabra en la base de datos (addWord).



eliminarla si fuese necesario (deleteWord).



actualizar el campo de numCkeck de la palabra.



(updateWord) ya que los otros atributos de la misma se considera han de mantenerse constantes.





También es la encargada de crear las listas: •

todas las palabras buscadas (getSearchedWords) .



todas las palabras problemáticas (getBadWords).

WordReference Esta clase, se trata de una adaptación exclusiva para este proyecto que permite gestionar las peticiones realizadas a WordReference mediante el protocolo REST que ya se ha definido en el capítulo 1.

33

2 - Análisis

En si tiene un método principal translate() que dada una palabra sin traducir, realiza una petición y rellena los atributos del objeto Word con los datos obtenidos en formato JSON.

2.3 Diagrama de estados Como se comenta en el punto anterior, la base del proyecto son las palabras buscadas, las cuales pueden no haber sido buscadas nunca, haber sido buscadas y se consideradas como aprendidas o haber sido buscadas y aparecer en los diferentes juegos. En estos juegos, básicamente se ha de tener en cuenta en cada “partida” que palabra o palabras se van a aprender y el estado de esta palabra en relación al usuario. Si es una palabra que ha sido buscada frecuentemente se tendrá que resolver en más partidas que si es una palabra que ha sido buscada una sola vez. Para ello el atributo numChecks dentro de la clase Word. Este atributo se trata de un descontador que en caso de estar a 0 no aparecerá en los juegos y en caso de ser buscada dicha palabra aumentará en 3. Por ello, si el usuario busca la palabra “DOG” tres veces en diferentes momentos, el atributo tendrá el valor de 9. Y por cada vez que haya resuelto correctamente una partida con esta palabra, se descontará 1. Otro punto a destacar, es que en cada juego ha de tener un número mínimo de palabras para que se pueda jugar, por ejemplo, en el caso del implementado en este proyecto, se ofrece una palabra y 5 opciones como posibles resultados por lo que como mínimo son necesarias 5 palabras para poder jugar. Aquí un ejemplo de funcionamiento básico. Acción

situación

búsqueda “work”

numChecks “work” = 3; total palabras almacenadas = 1;

búsqueda “house”

numChecks “house” = 3; total palabras almacenadas = 2;

búsqueda “work”

numChecks “work” = 6; total palabras almacenadas = 2;

búsqueda “Pastimes”

numChecks “pastimes” = 3;

34

Diccionario traductor Android para aprender idiomas

total palabras almacenadas = 3; búsqueda “weather”

numChecks “weather” = 3; total palabras almacenadas = 4

búsqueda “restaurant”

numChecks “restaurant” = 3; total palabras almacenadas = 5; Ya se puede jugar a “GameTest”

búsqueda “relation”

numChecks “relation” = 3; total palabras almacenadas = 6;

búsqueda “work”

numChecks “work” = 9; total palabras almacenadas = 6;

Partida a “GameTest” con la palabra numChecks “relation” = 2 “relation”

total palabras almacenadas = 6;

Ilustración 21 Diagrama de estados de una palabra

35

2 - Análisis

2.4 Diagramas de secuencia 2.4.1

Home/Search

En el diagrama de secuencia siguiente, se puede observar el proceso de funcionamiento la primera actividad en la que el usuario introduce una palabra en el buscador y obtiene la traducción de dicha palabra.

Ilustración 22 Diagrama de secuencia traducción

Lo primero que realiza esta actividad, es una comprobación de que la palabra no haya sido nunca buscada en la base de datos(searchWord()). Si ha sido buscada anteriormente, muestra la respuesta y a continuación suma 3 en el campo numChecks de la base de datos (updateNumChecks()). En caso contrario, a través de la clase WordReference (translate()), se hace una petición JSON a la API de WordReference para obtener la traducción y a continuación se guarda en la base de datos con un valor inicial de numChecks=3.

36

Diccionario traductor Android para aprender idiomas

2.4.2 Juego 1: GameTest

Ilustración 23 Diagrama de secuencia del juego GameTest

Esta actividad de la aplicación, se trata de un primer juego para utilizar todas las funcionalidades que pueden ser necesarias, iniciar ejercicio, comprobar respuesta, ampliar o reducir el atributo numChecks de una palabra. La actividad se inicia obteniendo la lista de palabras por aprender de la base de datos, y se escoge una aleatoria de entre estas que aparecerá como pregunta en el enunciado del juego, y también se escogen 4 palabras que sean diferentes a la primera que serán mostradas como posibles respuestas. Cuando el usuario escoge una respuesta, si esta es incorrecta, se suma uno en el atributo numCheck de la palabra, en caso contrario se le resta uno y a continuación se reinicia el ejercicio. Todo este proceso hasta que el número de palabras a aprender sean menor que 5.

37

2 - Análisis

2.4.3

“BadWordsList” Lista de palabras por aprender

Ilustración 24 Diagrama de secuencia de lista de palabras a aprender

Esta actividad pretende mostrar una lista de las palabras a aprender por el usuario, por lo que al entrar en la actividad se hace una petición a la clase “DatabaseHandler” que retorna dicha lista.

2.4.4

Diccionario o lista de palabras buscadas

Ilustración 25 Diagrama de secuencia de lista de palabras buscadas

Esta actividad pretende mostrar una lista de las palabras buscadas por el usuario, por lo que al entrar en la actividad se hace una petición a la clase “DatabaseHandler” que retorna dicha lista.

38

Diccionario traductor Android para aprender idiomas

39

3 - Desarrollo de la aplicación

3 Desarrollo de la aplicación

El desarrollo de este proyecto se realizará únicamente en el sistema operativo Android, por lo que previamente a explicar el desarrollo de cada pantalla o activity del proyecto, es conveniente hablar sobre algunos elementos del framework que son imprescindibles en cualquier desarrollo sobre éste y de algunos específicos de este proyecto que su comprensión previa ayudan a comprender los desarrollos particulares de las diferentes activities.

3.1 AndroidManifest.xml Este archivo es el más importante de todo proyecto en Android. En este archivo se definen tanto las activities que van a aparecer en el proyecto como los elementos del móvil que se va a necesitar utilizar (permisos), como bluetooth, sensores, acceso a Internet… Además, se definen las versiones de Android que se va a tener en cuenta para el desarrollo, poniendo la versión mínima necesaria para la utilización de la app, que estará definida por el SDK que se utilice y será la que dé límite en cuanto a API para el desarrollo. La máxima se puede limitar manualmente o escoger la opción por defecto, que son todas las superiores a la anterior. En este proyecto se define: Versión SDK

8

 

Permisos

Internet

 

Icono

de

la

android:icon="@drawable/ic_launcher"  

aplicación Activity

AppDictu

 

40

Diccionario traductor Android para aprender idiomas

                                                                   

Activity

TestGame

                                                                   

Activity

BadWord

                                           

Activity

Searched

                                                                   

Activity

SettingsA

                                           

3.2 Gestión de datos Android proporciona dos herramientas principales para la gestión de datos en una aplicación móvil: 3.2.1

Content Providers

Un Content Provider es el mecanismo proporcionado por la plataforma Android para permitir compartir información entre aplicaciones. Una aplicación que desee que todo o parte de la información que almacena esté disponible de una forma controlada para el resto de aplicaciones del sistema deberá proporcionar un content provider a través del cuál se pueda realizar el acceso a dicha información. Este mecanismo es utilizado por muchas de las aplicaciones estándar de un dispositivo Android, como por ejemplo la lista de contactos, la aplicación de SMS, o el calendario/agenda. Esto quiere decir que permite el acceso a los datos gestionados por

42

Diccionario traductor Android para aprender idiomas

estas aplicaciones desde otras aplicaciones Android haciendo uso de los content providers correspondientes.

3.2.2 SQLite - DatabaseHandler.java SQLite es un motor de bases de datos muy popular en la actualidad por ofrecer características tan interesantes como su pequeño tamaño. Además, no necesita servidor, precisa de poca configuración, es transaccional y de código libre. Android incorpora de serie todas las herramientas necesarias para la creación y gestión de bases de datos SQLite, y entre ellas una completa API para llevar a cabo de manera sencilla todas las tareas necesarias. Crear, actualizar, y conectar con una base de datos SQLite se hace a través de una clase auxiliar llamada SQLiteOpenHelper, o para ser más exactos, de una clase propia que deriva de ella y que se ha personalizado para que se adapte lo máximo posible a las necesidades concretas de nuestro proyecto. De estas dos herramientas (content provider o SQLite), se escoge la de trabajar con SQLite para el desarrollo del proyecto, dado que es la herramienta de gestión de datos de Android más adecuada para las necesidades del mismo y porque en este no se considera necesaria la cualidad de poder comunicar estos datos con otras aplicaciones del smartphone. addWord: Este método añade una palabra nueva a la base de datos de la aplicación con los valores de la palabra original buscada, el idioma original en el que se realiza la búsqueda, la palabra traducida, el idioma de la palabra traducida y el atributo numChecks que por defecto está definido a 3.

public  void  addWord(Word  word)  {                  SQLiteDatabase  db  =  this.getWritableDatabase();                          ContentValues  values  =  new  ContentValues();  

   

3 - Desarrollo de la aplicación

43

               values.put(KEY_WORD,  word.get_word());  //  word                  values.put(KEY_TRANSLATION,  word.get_translation());  //  word  traslation                  values.put(KEY_OR_LANG,  word.get_languaje_orig());  //  word  traslation                  values.put(KEY_TR_LANG,  word.get_translation_languaje());  //  word   traslation                  values.put(KEY_NO_CHECKS,  word.get_num_checks());  //  word  traslation                              //  Inserting  Row                  db.insert(TABLE_WORDS,  null,  values);                  db.close();  //  Closing  database  connection   }  

getWord(int i): Este método retorna una palabra concreta a partir del identificador de la misma en la base de datos.

public  Word  getWord(int  id)  {             Word  w  =  new  Word();             SQLiteDatabase  db  =  this.getReadableDatabase();    

 

Cursor  cursor  =  db.query(TABLE_WORDS,  new  String[]  {  KEY_ID,  

 

 

                       KEY_TRANSLATION,  KEY_NO_CHECKS  },  KEY_WORD  +  "=?",  

 

 

                       new  String[]  {  String.valueOf(id)  },  null,  null,  null,  

null);    

 

       if  (cursor  !=  null  &&  cursor.moveToFirst()){  

 

 

               

w.set_id(Integer.parseInt(cursor.getString(cursor.getColumnIndex(KEY_ID))));    

 

               

w.set_word(cursor.getString(cursor.getColumnIndex(KEY_WORD)));    

 

               

w.set_orig_languaje(cursor.getString(cursor.getColumnIndex(KEY_OR_LANG)));    

 

               

w.set_translation_languaje(cursor.getString(cursor.getColumnIndex(KEY_TR_LANG)));    

 

               

w.set_translation(cursor.getString(cursor.getColumnIndex(KEY_TRANSLATION)));    

 

               w.set_num_checks(Integer.parseInt(cursor.getString(  

44

 

Diccionario traductor Android para aprender idiomas

 

                                                                                       

cursor.getColumnIndex(KEY_NO_CHECKS))));    

 

               return  w;  

 

 

       }  

               return  null;   }  

getAllWords: Este método realiza una consulta a la base de datos para retornar una lista de todas las palabras que se han buscado alguna vez ordenados alfabéticamente. Esto lo retorna en un ArrayList de objetos de la clase Word.

public  List  getAllWords()  {                  List  wordList  =  new  ArrayList();                  String  selectQuery  =  "SELECT    *  FROM  "  +  TABLE_WORDS  +  "  ORDER  BY  "  +   KEY_WORD;                            SQLiteDatabase  db  =  this.getWritableDatabase();                  Cursor  cursor  =  db.rawQuery(selectQuery,  null);                              if  (cursor.moveToFirst())  {                          do  {                                  Word  word  =  new  Word();                                  word.set_id(Integer.parseInt(cursor.getString(0)));                                  word.set_word(cursor.getString(1));                                  word.set_translation(cursor.getString(2));                                  word.set_orig_languaje(cursor.getString(3));                                  word.set_translation_languaje(cursor.getString(4));                                  word.set_num_checks(Integer.parseInt(cursor.getString(5)));                                                                    wordList.add(word);                          }  while  (cursor.moveToNext());                  }                  return  wordList;   }  

3 - Desarrollo de la aplicación

45

getBadWords: Este método realiza una búsqueda en la base de datos de aquellas palabras que son consideradas como no aprendidas, es decir, aquellas palabras que tengan en el atributo numChecks un valor superior a cero. public  List  getBadWords()  {                  List  wordList  =  new  ArrayList();                  String  selectQuery  =  "SELECT    *  FROM  "  +  TABLE_WORDS  +  "  WHERE  "  +   KEY_NO_CHECKS  +  "  >  0"  ;                    SQLiteDatabase  db  =  this.getWritableDatabase();                  Cursor  cursor  =  db.rawQuery(selectQuery,  null);                  if  (cursor.moveToFirst())  {                          do  {                                  Word  word  =  new  Word();                                  word.set_id(Integer.parseInt(cursor.getString(0)));                                  word.set_word(cursor.getString(1));                                  word.set_translation(cursor.getString(2));                                  word.set_orig_languaje(cursor.getString(3));                                  word.set_translation_languaje(cursor.getString(4));                                  word.set_num_checks(Integer.parseInt(cursor.getString(5)));                                  wordList.add(word);                          }  while  (cursor.moveToNext());                  }                            return  wordList;   }  

updateWord: Este método sirve para actualizar los valores que puedan variar en una “palabra”. Teniendo en cuenta que la traducción de una palabra de un idioma a otro y que la traducción de la misma palabra entre pares de idiomas distintos se consideran elementos diferentes, el único campo que se ha considerado que se va a actualizar, es el de numChecks, es por ello que es el único valor que se puede modificar en la base de datos.

public  int  updateWord(Word  word)  {                  SQLiteDatabase  db  =  this.getWritableDatabase();                  ContentValues  values  =  new  ContentValues();  

46

Diccionario traductor Android para aprender idiomas

               values.put(KEY_NO_CHECKS,  word.get_num_checks());                  return  db.update(TABLE_WORDS,  values,  KEY_ID  +  "  =  ?",  new  String[]  {   String.valueOf(word.get_id())  });   }  

deleteWord(Word w): Este método permite eliminar una palabra de la base de datos a partir del objeto de la misma para obtener el id.

public  void  deleteWord(Word  word)  {                  SQLiteDatabase  db  =  this.getWritableDatabase();                  db.delete(TABLE_WORDS,  KEY_ID  +  "  =  ?",  new  String[]  {   String.valueOf(word.get_id())  });                  db.close();   }  

find(Word w): Este método retorna un valor true o false en función de si la palabra se encuentra o no en la base de datos a partir de la palabra original y el idioma. Además si la palabra es encontrada actualiza sus campos con los obtenidos desde la base de datos.

public  boolean  find(Word  w)  {    

boolean  exist  =  false;  

 

SQLiteDatabase  db  =  this.getReadableDatabase();  

 

Cursor  cursor  =  db.query(TABLE_WORDS,  new  String[]  {  KEY_ID,  

 

                       KEY_TRANSLATION,  KEY_NO_CHECKS  },  KEY_WORD  +  "=?",  

 

                       new  String[]  {  w.get_word()  },  null,  null,  null,  null);  

 

if  (cursor  !=  null  &&  cursor.moveToFirst()){  

 

         

w.set_id(Integer.parseInt(cursor.getString(cursor.getColumnIndex(KEY_ID))));    

         

w.set_translation(cursor.getString(cursor.getColumnIndex(KEY_TRANSLATION)));                                                                        

47

3 - Desarrollo de la aplicación

w.set_num_checks(Integer.parseInt(cursor.getString(cursor.getColumnIndex(KEY_NO_ CHECKS))));    

         exist  =  true;  

 

}  

               return  exist;   }  

3.3 Clase WordReference.java Como se decía anteriormente, de entre las diferentes opciones que existen para generar un diccionario de traducción entre varios idiomas (API de Google Translate, WordReference, Apertium, Bing Translator,...) se ha escogido la API de WordReference sobre todo por el cambio en el formato de utilización de la API de Google Translate, que a partir de ahora tiene un coste por carácter traducido y en comparación a las otras, es mucho más escalable y ofrece información añadida que podría ser interesante para nuevos juegos. A partir de aquí, se definen los atributos y métodos básicos que son necesarios para sacarle el máximo rendimiento a esta API, y teniendo en cuenta que se hace siempre a partir de peticiones

REST

a

una

URL

con

el

siguiente

formato:

"http://api.wordreference.com/[version]/[API ID]/json/[par de lenguajes]/[Palabra]" y que retorna objetos JSON, es necesario utilizar la libreria de JAVA JSONObject específica para este tipo de casos.

3.3.1

Atributos de la clase

APPIKEY: La AppiKey es la clave necesaria para poder utilizar la API en nuestra aplicación. Esta clave además tendrá que estar presente en todas las peticiones que se hagan, es por ello y para que sea más sencillo de modificar, que se crea un atributo estático con la misma.

48

Diccionario traductor Android para aprender idiomas

APILevel: Otro de los campos que pueden variar de la API ofrecida por WordReference es la versión de la misma, ya que de una a otra pueden haber cambios significativos. Es imprescindible establecer una constante con este valor y se pueda modificar en caso necesario. APIURL: La

APIURL

es

la

URL

a

la

que

se

hace

la

petición,

en

este

caso

“http://api.wordreference.com/”. Este valor no debería cambiar, por lo que se podría utilizar en texto dentro de los métodos, pero se considera una buena práctica definir como atributo este texto por si diese la circunstancia que la URL de la API de WordReference cambiase. APIFormat: La API de WordReference ofrece diversos formatos de retorno de la petición: JSON, XML, … en un principio se establecen que las peticiones que se van a realizar siempre serán en JSON al ser un lenguaje de más sencillo tratamiento. De todos modos y de cara a una posible ampliación de esta clase, se define este atributo para que sea modificable. sourceWord: Este atributo es la palabra escrita por el usuario para obtener su traducción. sourceLanguaje: Dentro del par de idiomas escogido por el usuario, este atributo haría referencia al idioma original en que el usuario realiza la búsqueda. destinationLanguaje: Igual que el anterior, pero en este caso se trata del idioma de destino de la traducción. En ambos casos, se trata del código ISO del lenguaje, es decir ES para Español, EN para Inglés, CA para Catalán, etc...

3 - Desarrollo de la aplicación

49

translation: En este atributo se puede almacenar el objeto JSON una vez convertido por la clase JSONObject para poder trabajar con los diferentes resultados que ofrece la API de WordReference para cada palabra. translatedWord: En este atributo se almacenará la palabra una vez traducida, para poder trabajar con ella a través del método getTranslatedWord. numResults: En varios puntos de este proyecto, al hablar de la API de WordReference, se ha hecho referencia a que esta ofrece normalmente más de un resultado para una misma petición, es por ello que es interesante tener en algún sitio el número de resultados obtenidos. translationError: Como en todas las APIs, siempre hay que tener en cuenta la posibilidad de que haya ocurrido algún error en la petición, por ejemplo que la palabra no exista o no se encuentre, que haya algún error interno en la API de WordReference y no se pueda responder a la petición, que haya una carga muy elevada de peticiones y no se pueda hacer frente,... es por ello que se ha definido un atributo para almacenar el error en caso necesario.

3.3.2

Métodos de la clase WordReference

Constructor WordReference: Como todo constructor en Java, genera un objeto de la clase, en este caso un objeto WordReference, en el que como mínimo ha de tener un idioma origen y un idioma destino.

public  WordReference(String  sourceLanguaje,  String  destinationLanguaje)  {    

super();  

 

this.sourceLanguaje  =  sourceLanguaje;  

 

this.destinationLanguaje  =  destinationLanguaje;  

}  

50

Diccionario traductor Android para aprender idiomas

prepareURL: Lo primero necesario para hacer una petición REST, es preparar la URL a la que se va a hacer dicha petición. En Java existe un tipo de objeto (URL) que ya está preparado para realizar esta tarea, es por ello, que se prepara un método que a partir de los atributos del punto anterior genera y retorna un objeto URL a la que se va a realizar la petición.

private  URL  prepareURL()  throws  Exception{    

URL  ret;  

 

ret  =  new  

URL(this.APIURL+"/"+this.APILevel+"/"+this.APIKEY+"/"+this.APIFormat+"/"      

+this.sourceLanguaje+this.destinationLanguaje+"/"+this.sourceWord);  

 

return  ret;  

}  

JSONfromURLRequest: Este método, es quizás el más importante de toda la clase, dado que realiza una petición Http a la URL que comentada anteriormente y retorna un objeto JSONObject con la respuesta de dicha petición. Hay que tener en cuenta en este método, que el retorno del servidor al que se hace una petición de este estilo, puede tener diversas codificaciones, en el caso de WordReference, se trata de UTF-82 y por tanto es esta la codificación que se va a tratar.

2

UTF-8 es uno de los formatos de codificación de caracteres más comunes para obtener la información entre

cliente y servidor. La codificación de caracteres, define la forma en la que se codifica un carácter dado en un símbolo en otro sistema de representación. En el caso de Internet, esta codificación se representa mediante bits. Por lo que si el codificado entre servidor y cliente no es el mismo, se generan errores de interpretación.

51

3 - Desarrollo de la aplicación

public  static  JSONObject  JSONfromURLRequest(String  url){    

 

InputStream  is  =  null;  

 

 

String  result  =  "";  

 

 

JSONObject  jArray  =  null;  

 

 

try{  

 

 

 

HttpClient  httpclient  =  new  DefaultHttpClient();  

 

 

 

HttpPost  httppost  =  new  HttpPost(url);  

 

 

 

HttpResponse  response  =  httpclient.execute(httppost);  

 

 

 

HttpEntity  entity  =  response.getEntity();  

 

 

 

is  =  entity.getContent();  

 

 

}catch(Exception  e){  

 

 

 

 

 

}  

 

 

try{  

 

 

 

 

 

Log.e("log_tag",  "Error  in  http  connection  "+e.toString());  

BufferedReader  reader  =  new  BufferedReader(new  

InputStreamReader(is,"UTF-­‐8"),8);    

 

 

StringBuilder  sb  =  new  StringBuilder();  

 

 

 

String  line  =  null;  

 

 

 

while  ((line  =  reader.readLine())  !=  null)  {  

 

 

 

 

 

 

 

}  

 

 

 

is.close();  

 

 

 

result=sb.toString();  

 

 

}catch(Exception  e){  

 

 

 

 

 

}  

 

 

try{  

 

                 

 

 

}catch(JSONException  e){  

 

 

 

 

 

}  

 

 

return  jArray;  

 

}  

sb.append(line  +  "\n");  

Log.e("log_tag",  "Error  converting  result  "+e.toString());  

jArray  =  new  JSONObject(result);  

Log.e("log_tag",  "Error  parsing  data  "+e.toString());  

 

52

Diccionario traductor Android para aprender idiomas

Translate: Por último, y más interesante, es generar el método que se va a utilizar desde fuera del objeto con el fin de obtener una traducción. El método translate, realiza una petición con al método anterior y formatear la respuesta obtenida y incluye los resultados en un objeto “Word” que le viene dado como parámetro. Además como se ha comentado en la API de WordReference, la información relativa a una palabra puede ser de tres maneras, la principal (PrincipalTranslations) es la traducción directa de una palabra, por ejemplo Dog-Perro. La segunda opción, serían las entradas Entries, en las que ofrece frases en las que se puede encontrar la palabra y el significado de la misma en esta frase. Y por último, se pueden encontrar los compuestos en los que si se combina dicha palabra junto a otra u otras tuviese diferente significado. Por ejemplo la palabra PERK, no tiene una traducción principal en WordReference pero como entrada ofrece “beneficio” y en la combinación PERK UP, se obtiene “phrasal verb” de significado animarse- espabilarse. Este múltiple formato de retorno en la respuesta de la API de WordReference obliga a , dentro de la clase que generada, controlar si alguno de estas maneras de obtener la información no se ha obtenido. Si en una traducción no se ha obtenido traducción primaria, como en el ejemplo anterior, es preciso controlar si tiene entrada o significado en algún compuesto. public  void  translate(String  word){    

try{  

 

 

this.sourceWord  =  word;  

 

 

URL  url  =  this.prepareURL();  

 

 

 

 

 

JSONObject  translation  =  new  JSONObject();  

 

 

String  urlStr  =  url.toString();  

 

 

urlStr  =  urlStr+"";  

53

3 - Desarrollo de la aplicación

 

 

Log.i("WordReference.translate",  url.toString());  

 

 

translation  =  WordReference.JSONfromURLRequest(url.toString());  

 

 

if(!translation.isNull("term0")){  

 

 

 

 

 

 

if(!translation.getJSONObject("term0").isNull("PrincipalTranslations")){  

 

 

 

this.numResults  =  translation.length();    

 

this.translatedWord  =  

translation.getJSONObject("term0").    

 

 

 

getJSONObject("PrincipalTranslations").getJSONObject("0").  

 

 

 

getJSONObject("FirstTranslation").getString("term");  

 

 

 

Log.i("WordReference.translate","PrincipalTranslations:"+  

 

 

 

 

 

 

 

}else  

 

 

 

 

this.translatedWord);  

if(!translation.getJSONObject("term0").isNull("Entries")){//Entries    

 

 

 

 

 

 

 

 

translation.getJSONObject("term0").getJSONObject("Entries").  

 

 

 

getJSONObject("0").getJSONObject("FirstTranslation").  

 

 

 

 

 

 

 

 

 

Log.i("WordReference.translate",  "Entries:"  +  

 

 

this.translatedWord  =  

 

 

this.translatedWord);  

 

 

 

 

this.translatedWord  =    

 

 

 

 

translation.getJSONObject("term0").getJSONObject("Compounds").  

 

 

 

getJSONObject("0").getJSONObject("FirstTranslation").  

 

 

 

 

 

 

 

 

 

Log.i("WordReference.translate",  "Compounds:"  +  

 

 

 

getString("term");  

 

}else{  

 

getString("term");  

this.translatedWord);    

 

 

}  

 

 

}  

 

 

else  if(translation.has("Error")){  

 

 

 

 

 

}  

this.translationError  =  translation.getString("Note");  

54

Diccionario traductor Android para aprender idiomas

 

 

else{  

 

 

 

this.translationError  =  "This  word  has  not  translation  or  

does  not  exist";    

 

}  

 

}catch(Exception  e){  

 

 

 

}  

Log.e("log_tag",  "Error  parsing  data  "+e.toString());  

}  

3.4 Pantallas de la aplicación Android, para el desarrollo de sus aplicaciones, ofrece la posibilidad de separar el diseño de la programación. Siendo el primero definido dentro de un archivo XML a través de los componentes que ofrece Android para maquetar. Esta maquetación se hace de un modo similar a HTML pero con elementos propios de Android. Por ejemplo, si se pretende añadir un botón sería con el siguiente código:

 

Dónde: - android:id define el identificador del botón para poder acceder a él desde el código. - android:layout_width define el ancho del elemento, en este caso con “wrap_content” se definine que el elemento tiene que tener el ancho de su contenido. - android_layout_height igual que el atributo anterior pero con el alto. - android:text define el texto que va a contener el elemento, además en este caso, se puede observar que (@string/search) hace referencia a un valor definido en otro sitio. Esto es porque Android permite tener un archivo donde se definan todos los strings de la aplicación, de modo que si se quiere internacionalizar la misma sea mucho más sencillo.

55

3 - Desarrollo de la aplicación

A parte de estos atributos, se pueden encontrar muchos más para este elemento “Button” y otros específicos para los otros elementos que se puedan precisar que no se va a incluir en este proyecto dado que no pretende ser una guia para aprender a maquetar en Android. Además del archivo .xml que genera la parte visual de cada activity, es preciso generar una clase extendida de la clase Activity, en la que se desarrolla toda la parte lógica de la aplicación. Esta clase al ser herencia de Activity, tiene que tener algunos métodos “sobreescritos” en los que se desarrolle dicha lógica. Estos métodos son interesantes tenerlos en cuenta en su concepto y sobretodo dentro del ciclo de vida de la Activity:

3.4.1

Inicio / Buscador Esta es la pantalla o Activity inicial de la aplicación, y también la que hará de buscador. En ella el usuario se puede encontrar el área de texto donde introducir la palabra a traducir, el idioma de origen y el idioma de destino. Y, por último, el botón que realiza la petición para obtener la traducción de la palabra a traducir. A partir de todo lo anterior, dentro del método sobreescrito onCreate, se inician al principio todos los elementos que están definidos en el XML para poder interactuar con ellos desde Java. A continuación se crea un listener para este botón que al

Ilustración 26 Pantalla inicial de la aplicación

ser

clickado

realiza

DababaseHelper.

una

petición

a

la

clase

56

Diccionario traductor Android para aprender idiomas

En caso de no encontrar la palabra buscada en la base de datos se realiza una petición a WordReference para obtener dicha palabra así y a continuación la guarda.

this.search_button.setOnClickListener(new  View.OnClickListener()  {                                  @Override    

public  void  onClick(View  v)  {  

                                     if(!search_word.getText().toString().equals("")){                              

String  orig_word  =  search_word.getText().toString();  

                           

Word  w  =  new  Word(orig_word,  

AppDictus.getInstance().getOriginalLanguajeCode(),  "",   AppDictus.getInstance().getTraslationLanguajeCode());                              

if(!db.find(w)){    

                           

 

WordReference  wr  =  new  

WordReference(AppDictus.getInstance().getOriginalLanguajeCode(),   AppDictus.getInstance().getTraslationLanguajeCode());                              

 

wr.translate(orig_word);  

                           

 

if(!wr.getError().isEmpty()){  

 

Toast.makeText(APPdictusActivity.this.getApplicationContext(),  

wr.getError(),  10000).show();                              

 

}  

                           

 

else{  

                           

 

 

String  translation  =  wr.getTranslatedWord();  

                           

 

 

w.set_translation(translation);  

                           

 

 

db.addWord(w);  

                           

 

}  

                           

}else{  

                           

 

w.set_num_checks(w.get_num_checks()+3);  

                           

 

db.updateWord(w);  

                           

}  

                                       search_results.setText(w.get_translation());                            }else{                                                        }                          }                  });          }  

search_results.setText("you  must  write  any  word");  

57

3 - Desarrollo de la aplicación

3.4.2

Juego 1: GameTest En esta aplicación, se ha definido un único juego inicial que utilice todos los elementos básicos que pueda necesitar cualquier otro juego: solicitar una palabra a aprender de manera aleatoria, una lista de todas ellas, comprobar si la respuesta del usuario es correcta, marcar una palabra como aprendida cuando se considere necesario,... En este caso, se puede ver que la maquetación creada es un poco más compleja que la de la activity anterior, ya que en este caso aparece la palabra de pregunta, y con 5 campos de RadioButton que corresponden a las 5 posibles respuestas que se van a ofrecer.

Ilustración 27 Pantalla GameTest

 

               

58

Diccionario traductor Android para aprender idiomas

                                                                 

A continuación se muestran los métodos que dan vida a esta maquetación:

initGame(): Primero de todo se inicia el juego con un método initGame() que obtiene de la base de datos todas las palabras a aprender y comprueba que la longitud de está lista sea mayor que 5 y lanza el método showTestQuestion(), en caso contrario muestra un mensaje de error. private  void  initGame(){    

 

this.wordList  =  db.getBadWords();  

 

 

if(this.wordList.size()  >  5){  

 

 

 

 

 

}else{  

 

 

 

this.showTestQuestion();  

this.question.setText("You  don't  have  actually  enough  words  

59

3 - Desarrollo de la aplicación

searched,  please  find  translations  to  play.");    

 

 

this.option1.setVisibility(View.INVISIBLE);  

 

 

 

this.option2.setVisibility(View.INVISIBLE);  

 

 

 

this.option3.setVisibility(View.INVISIBLE);  

 

 

 

this.option4.setVisibility(View.INVISIBLE);  

 

 

 

this.option5.setVisibility(View.INVISIBLE);  

 

 

}  

 

}  

 

showTestQuestion(): Este método escoge una de las palabras a aprender al azar de las obtenidas en el anterior, que será la considerada como palabra de partida. A continuación, en el mismo método se escogen también de manera aleatoria otras 5 palabras aleatorias de la misma lista y se ponen en otra lista diferente denominada lista de opciones de partida, además con el fin de que no haya repeticiones, cada palabra escogida es extraída de la lista original. Luego se sustituye la palabra de partida por una de las que aparecen en la lista de opciones de partida, también de manera aleatoria. Por último, en este método se cogen las 5 palabras de las lista de opciones de partida y se ponen en los 5 elementos RadioButton.

private  void  showTestQuestion(){                  for(int  i=0;  i0)numChecks.setText("You  need  to  hit  "  +   w.get_num_checks()  +  "  times  this  word  to  regard  it  as  learned");   else  numChecks.setText("Congratulations!  you  have  already  learned  this  word");  

66

Diccionario traductor Android para aprender idiomas

Lista de palabras a aprender: private  List  wordList=  null;   ...   final  DatabaseHandler  db  =  new  DatabaseHandler(this);   this.wordList=  db.getBadWords();   ...   ...   ...   numChecks.setText("You  need  to  hit  "  +  w.get_num_checks()  +  "  times  this  word   to  regard  it  as  learned");  

Una vez obtenidas las diferentes listas de palabras, estas se han de mostrar en el layout searched_words_list que ya se ha explicado. Esto se hace recorriendo todo el array de objetos que retorna la clase DataBaseHandler, y guardando sólo el String de la palabra original buscada en un nuevo ArrayList, y a continuación se asigna este al layout list_words que también ha sido comentado.

ListwordsNames  =  new  ArrayList();//List  wordList  =  new   ArrayList();                  for(int  i=0;  i0)numChecks.setText("You  need  to  hit  "  +   w.get_num_checks()  +  "  times  this  word  to  regard  it  as  learned");  

68

Diccionario traductor Android para aprender idiomas

               else  numChecks.setText("Congratulations!  you  have  already  learned  this   word");                  d.show();                  Button  closeButton  =  (Button)  d.findViewById(R.id.close_word_dialog);                  closeButton.setOnClickListener(new  Button.OnClickListener()  {                                      public  void  onClick(View  view)  {                            d.dismiss();                                    }              });}  

3.4.4 Configuración A pesar de la sencillez de la aplicación desarrollada para la realización de este proyecto, se ha incluido en ella una pantalla donde el usuario puede personalizar algunos elementos de la misma. Actualmente,

solo

se

ha

considerado

imprescindible la posibilidad de escoger entre el par de idiomas que quiera aprender. Además, a raíz del cierre de la versión 1 de la API de Google Translate, se ha tenido que restringir en pares de idiomas en lugar de escoger ambos idiomas. Pero ésta es considerada una de las funcionalidades que se tendrían que resolver a más corto plazo. Para

la

generación

de

una

pantalla

de

configuración, Android ya ofrece por defecto un Ilustración 29 Pantalla de configuración

sistema sencillo con el que hacerlo.

Este se basa en la creación de un archivo XML en el que se definen los elementos que se van a poder configurar de la aplicación y a continuación se utiliza dicho archivo como

69

3 - Desarrollo de la aplicación

layout para una Activity que en lugar de ser herencia de la clase Activity extiende de PreferenceActivity.

     

 

 

 

       

 

 

Como se puede observar, en el código anterior que hace referencia al archivo preferences.xml no se incluyen todos los valores de los pares de idiomas ofrecidos al usuario. Esto se ha realizado de esta manera para que sea más escalar al tener estos pares de idiomas centralizados en un único archivo arrays.xml. Además, para mostrar los idiomas correctamente y almacenarlos sin que haya ningún problema con la codificación de carácteres, se han definido en el mismo archivo dos arrays, uno con los pares de idiomas y el otro con los valores de dichos pares. Se consideran valores a los códigos ISO de cada idioma, de modo que el para Inglés-Español sería EN-ES.

     

     

     English  -­‐  French      

     EN-­‐FR      

     English  -­‐  Italian    

     EN-­‐IT      

     English  -­‐  Spanish    

     EN-­‐ES      

     Français  -­‐  Espagnol    

     FR-­‐ES      

     Español  -­‐  Portugués    

     ES-­‐PT      

     English  -­‐  Portuguese    

     EN-­‐PT      

70

Diccionario traductor Android para aprender idiomas

     English  -­‐  German      

     EN-­‐GE      

     English  -­‐  Russian      

     EN-­‐RU      

     English  -­‐  Polish      

     EN-­‐PO      

     English  -­‐  Romanian      

     EN-­‐RO      

     English  -­‐  Czech      

     EN-­‐CH      

     English  -­‐  Greek      

     EN-­‐GR      

     English  -­‐  Turkish      

     EN-­‐TR      

     English  -­‐  Chinese      

     EN-­‐CN      

     English  -­‐  Japanese  

     EN-­‐JP      

     English  -­‐  Korean      

     EN-­‐KO      

     English  -­‐  Arabic    

     EN-­‐AR      

 

     

3.5 Menú y navegación de la aplicación En todas las pantallas que se han explicado en el punto anterior, no se ha incluido uno de los elementos más importantes: la navegación entre pantallas. Esto se puede realizar mediante un elemento que ofrece la API de Android, en el que se define el menú en un archivo XML dentro de la carpeta menu.                                                        

3 - Desarrollo de la aplicación

71

De este modo, además, se pueden definir menús variables en función de la pantalla en que se ubique cada menú. Esto se realiza con el método sobrescrito onCreateOptionsMenu.

@Override          public  boolean  onCreateOptionsMenu(Menu  menu)  {                  MenuInflater  inflater  =  getMenuInflater();                  inflater.inflate(R.menu.main_menu,  menu);                  return  true;          }  

Además, como se puede observar en el archivo main_menu.xml, este menú está compuesto de cinco elementos, en los que cada uno está compuesto a su vez de un identificador de elemento de menú y una imagen. La imagen es la que se muestra en la aplicación y el identificador es el que se puede utilizar para averiguar la opción escogida por el usuario y así lanzar el “Intent” de esta Activity.

@Override          public  boolean  onOptionsItemSelected(MenuItem  item)  {                  //  Handle  item  selection             switch  (item.getItemId())  {                  case  R.id.goHome:                    

Intent  home  =  new  Intent(getApplicationContext(),  

APPdictusActivity.class);    

 

 

startActivity(home);  

 

 

 

return  true;  

               case  R.id.goGame:                    

Intent  testGame  =  new  Intent(getApplicationContext(),  

TestGame.class);    

 

 

startActivity(testGame);  

 

 

 

return  true;  

               case  R.id.goWords://Bad  words  activity                    

Intent  badWords  =  new  Intent(getApplicationContext(),  

BadWords.class);  

72

Diccionario traductor Android para aprender idiomas

 

 

 

startActivity(badWords);  

 

 

 

return  true;  

               case  R.id.goDiccionary:                    

Intent  searchedWords  =  new  Intent(getApplicationContext(),  

SearchedWords.class);    

 

 

startActivity(searchedWords);  

 

 

 

return  true;  

               case  R.id.goSettings:                    

Intent  settings  =  new  Intent(getApplicationContext(),  

SettingsActivity.class);    

 

 

startActivity(settings);  

 

 

 

return  true;  

               default:                          return  super.onOptionsItemSelected(item);                  }          }  

4 - Verificación y pruebas

73

4 Verificación y pruebas En el momento en que se tiene la aplicación desarrollada y se ha comprobado unilateralmente que no existen problemas en su utilización. Se ha de proceder a realizar una serie de gestiones para, primero ratificar su correcto funcionamiento y a continuación hacerla accesible al público.

4.1 Protocolo de pruebas de la aplicación A pesar de que ya se considere que la aplicación no tiene problemas de uso ni “bugs” o errores de codificación, es imprescindible generar un juego de pruebas en las que se compruebe el correcto funcionamiento de todos los elementos de los que está compuesta. Para este caso se han escogido como grupo de control a 5 usuarios con perfiles diferentes y se les ha asignado a cada uno un libro en un idioma conocido del que tenga un nivel bajo. El resultado esperado es que después de realizar la prueba, cada usuario demuestre un incremento en el vocabulario de dicho idioma.

4.1.1

Definición de la prueba

La prueba a realizar consiste en escoger una página al azar de un libro en el idioma a mejorar y interpretar su significado con la única ayuda de la aplicación. La intención de esta parte, es que el usuario haya obtenido una lista de cómo mínimo 10 palabras a aprender. En caso contrario, el usuario debería continuar con la página siguiente del libro hasta obtener dicha cantidad de palabras. A continuación una vez comprobado que se ha entendido el correcto significado de la página escogida, el usuario ha de jugar al juego propuesto hasta que se hayan agotado las palabras a aprender.

74

Diccionario traductor Android para aprender idiomas

4.1.2 Resultados obtenidos Una vez realizada la prueba anterior, se revisan las palabras buscadas por todos los usuarios con el fin de comprobar si estos han mejorado el idioma propuesto a cada uno y si han memorizado dichas palabras.

Usuario  

Usuario  1  

Dispositivo  

Nexus  S  

Usuario  2  

Usuario  3  

Usuario  4  

Galaxy  

Samsung  

Samsung  

Nexus  

Infuse  

Galaxy  Tab  

Usuario  5   HTC    Desire  

Par  de  idiomas  

EN-­‐PT  

EN-­‐ES  

DE-­‐EN  

FR-­‐EN  

EN-­‐IT  

Palabras  buscadas  

15  

12  

18  

16  

23  

12  

10  

7  

6  

12  

80%  

83.3%  

38.8%  

37.5%  

52.17  

Palabras   memorizadas   %  

palabras  

memorizadas  

Tabla 1: Tabla resultados prueba aplicación

El dato más relevante de la tabla anterior, es obviamente la cantidad de palabras memorizadas por cada uno de los cinco usuarios. Además, se puede observar que este dato varia notablemente de un usuario a otro. A partir de estos resultados, se obtiene la conclusión de que cada usuario precisa de una cantidad diferente de apariciones de una palabra en los juegos por lo que se ha añadido a la pantalla de opciones la posibilidad de modificar la cantidad de palabras a buscar.

4.2 Google Analytics para Android El SDK de Google Analytics para Android permite a los desarrolladores de Android Apps obtener información sobre la actividad de los usuarios dentro de sus aplicaciones, ofreciendo las herramientas para monitorizar las campañas de marketing que se quieran realizar sobre las aplicaciones.

75

4 - Verificación y pruebas

De esta manera se pueden analizar: - El número de usuarios que está usando las aplicación. - Desde donde se usan la aplicación en el mundo. - Adopción y uso de determinadas funcionalidades. - Compras y transacciones dentro de la aplicación. - Analizar los resultados de un anuncio. - ETC...

4.2.1

Instalación

1- Alta de proyecto en Google Analytics: Lo primero que hay que hacer para instalar Google Analytics en Android es dar de alta la aplicación en analytics de manera similar a si de una web se tratase, pero en el punto en el que pregunta si el protocolo va a ser http o https, hay un tercera opción que dice “Not a website” al seleccionarla y darle a siguiente ya ofrece la descarga de la librería tanto para Android como para iPhone.

Ilustración 30 Proceso instalación Google Analytics -Alta

2- Inclusión de la librería en el proyecto: A continuación, el siguiente paso después de descargarse la librería, es importarla al proyecto de modo que se pueda trabajar con ella. Para ello, en Eclipse, dentro de las propiedades del proyecto, se pueden añadir librerías de manera muy sencilla. Ya se ha visto anteriormente, que para todo proyecto en Android, es preciso definir qué elementos del teléfono se van a necesitar y que esto se define en el AndroidManifest.xml.

76

Diccionario traductor Android para aprender idiomas

En el caso de la libreria de Google Analytics, hay que incluir los permisos de conexión a Internet y acceso al estado de la red. INTERNET ACCESS_NETWORK_STATE Como el primero ya ha sido incluido para el funcionamiento de la aplicación solo hay que añadir el segundo, de modo que el archivo AndroidManifest.xml queda:

   

3- Definición de elementos a analizar: En este punto, la libreria de Google Analytics ya se encuentra instalada en el proyecto, por lo que el siguiente paso a realizar será definir que elementos del mismo se van a analizar. Este es uno de los pasos más importantes de este punto ya que se han de tener en cuenta todas aquellas funcionalidades del proyecto como acciones pueda realizar el usuario y además se han de definir en cada una de las actividades del proyecto. Además en este punto, cabe comentar que la API de Google Analytics ofrece algunos frameworks precocinados en los que de manera muy sencilla se pueda analizar diferentes activities. A pesar de las ventajas que ofrecen, estos frameworks, en general tienen un inconveniente en cuanto a determinadas funcionalidades de Google Analytics que son consideradas muy interesantes. Por ello se ha decidido inicialmente prescindir de ellos y utilizar la API básica de Google Analytics tal y como se explica a continuación.

Home/Search: Esta actividad del proyecto es la encargada de realizar traducciones de palabras para el usuario así como de añadir contenido a la base de datos de la aplicación. Por ello, en este

4 - Verificación y pruebas

77

caso, se analizarán las búsquedas realizadas tanto el número de las mismas como los pares de idiomas en los que se realicen. Es por todo lo anterior, que en esta pantalla o actividad se añade un elemento de análisis del tipo de búsqueda que hace el usuario, en el cual se utiliza además una de las últimas funcionalidades creadas por Google Analytics: Variables personalizadas3, de manera que se pueda analizar el par de idiomas que utilicen los usuarios para ver cual(es) son los más utilizados y ofrecer nuevas funcionalidades o ventajas a estos si se diese el caso de tener que centrarnos. De manera que para poder incluir Google Analytics en la Activity inicial o de buscador es necesario añadir el siguiente código: ...   GoogleAnalyticsTracker  tracker;   …   tracker  =  GoogleAnalyticsTracker.getInstance();   tracker.startNewSession("UA-­‐31977959-­‐1",  this);   tracker.trackPageView("/HomeSearchActivity");   …  

Y dentro del listener del botón de buscar: tracker.setCustomVar(1,  "Languaje  pair",                                                                                                                                                           AppDictus.getInstance().getOriginalLanguajeCode()+                                                                                                                                                         AppDictus.getInstance().getTraslationLanguajeCode(),  2);  

3

Las variables personalizadas es una funcionalidad en la que se puede enviar el par nombre-valor de la

variable y de este modo escalar los datos que se pueden analizar de tanto una web como una aplicación.

78

Diccionario traductor Android para aprender idiomas

Game - Test: Esta es junto con la anterior la Activity con más información que pueda interesar obtener. Por ejemplo, la cantidad de aciertos o fallos que suelen tener los usuarios y en qué idioma, o si se considera que está habiendo un progreso en su aprendizaje. Todo esto junto a mucha más información del usuario se puede obtener mediante las mentadas variables personalizables, pero en una primera etapa se ha decidido analizar únicamente el progreso del usuario, de modo que se analizan las palabras memorizadas por el usuario.

...   GoogleAnalyticsTracker  tracker;   …   tracker  =  GoogleAnalyticsTracker.getInstance();   tracker.startNewSession("UA-­‐31977959-­‐1",  this);   tracker.trackPageView("/game-­‐test");   …   tracker.setCustomVar(2,  "word  learned",  qWord.get_word(),  2);  

Otras activities: En cuanto a las otras tres activities del proyecto, como ya se ha explicado en puntos anteriores, son simplemente pantallas para mostrar información, a excepción de la activity de configuración, pero el actual dato de la misma (el par de idioma utilizado) ya se recoge en la primera activity. Es por ello que en estas tres, por el momento, únicamente se va a analizar la información de que el usuario ha entrado en la misma y la referente a esta acción: Tiempo de duración de su visita, visitas únicas, rebote,...

...   GoogleAnalyticsTracker  tracker;   …  

79

4 - Verificación y pruebas

tracker  =  GoogleAnalyticsTracker.getInstance();   tracker.startNewSession("UA-­‐31977959-­‐1",  this);   tracker.trackPageView("/....");  

4.2.2

Resultados obtenidos

Una vez instalado y configurado Google Analytics para Android en la aplicación de este proyecto, se ha dejado pasar un periodo de tiempo prudente en el que diversas personas han probado la aplicación, lo que permite acceder a una pequeña estadística sobre el uso que se ha hecho de ella. Al ser Google Analytics una plataforma orientada al análisis de visitas en páginas web, los resultados que se muestran, están inicialmente orientados a este tipo de análisis. A pesar de ello sigue siendo muy efectiva la información proporcionada. A continuación se van a detallar algunos de los aspectos que Google Analytics para Android permite analizar, aquellos que se consideran más relevantes. Para ello se accede a la URL http://analytics.google.com y se introduce el nombre de usuario y contraseña utilizados en el momento de dar de alta el proyecto. Resumen: En la primera pantalla de la plataforma, se puede ver las visitas obtenidas en el último mes, en el caso de una aplicación móvil, serían accesos a la aplicación.

Ilustración 31 Google Analytics - Visitas/mes

80

Diccionario traductor Android para aprender idiomas

Y de estos accesos, se puede obtener un pequeño análisis inicial, accesos totales en el periodo, usuarios únicos, pantallas visitadas, tiempo medio de visita,… Toda esta información, ha de ser traducida desde el lenguaje orientado a análisis web a lenguaje orientado a análisis de aplicaciones móviles: visita-acceso, visitante-usuario, pagina vistapantalla vista,…

Ilustración 32 Google Analytics - Resumen mes

Detalle pantallas vistas: Tanto en análisis web como en análisis de aplicaciones, uno de los aspectos que se consideran más relevantes por no decir el más importante, es que pantallas/páginas ha visitado el usuario ya que esta factor puede proporcionar al desarrollador o empresa información sobre los intereses de los usuarios.

Ilustración 33 Google Analytics - Pantallas visitadas

Como ya se ha comentado, la imagen anterior se basa en un periodo de prueba, por lo que la información obtenida no es para nada concluyente.

4 - Verificación y pruebas

81

Se puede observar que de todas las visitas obtenidas, un 40% ha accedido a la pantalla de portada, y el siguiente elemento más visitado es la pantalla de palabras buscadas. Y únicamente un 2.53% de las visitas ha accedido al juego. Análisis de las variables personalizadas: Se ha comentado en un punto anterior la posibilidad que ofrece Google Analytics para crear variables personalizadas con las que analizar conceptos específicos de un proyecto. En este caso, se selecciona como variable personalizada a analizar el par de idiomas escogido por los usuarios en el momento de hacer una búsqueda.

4.3 Puesta producción Cuando un proyecto en Android se considera como finalizado desde el punto de vista de desarrollo y se quiere ofrecer a otros usuarios, es necesario firmar la aplicación para que el teléfono del usuario pueda mostrar información del proveedor al usuario. Además, de esta manera se consigue un control por parte de Google de los desarrolladores con el fin de garantizar cierta seguridad. Si se puede saber quien ha creado que aplicación y esta aplicación es nociva, se puede impedir que ese usuario suba más aplicaciones al Market.

4.3.1

Creación del archivo APK firmado

El proceso de firmado de una aplicación es, en general, muy sencillo, y se puede realizar de dos maneras. A través de la línea de comandos de cualquier sistema operativo o a través de eclipse con el ADK de Android. Para este caso, se ha utilizado la segunda opción por ser más visual y sencilla.

82

Diccionario traductor Android para aprender idiomas

Paso 1: En la barra lateral de Eclipse, donde se listan los proyectos, se selecciona el proyecto que se quiere empaquetar, y con el botón derecho del ratón se abre el desplegable de opciones y dentro de Herramientas de Android, se selecciona Ilustración 34 Creación .apk firmado 1

“Export

Signed

Application

Package…”.

Paso 2: En este paso, simplemente se ha de ratificar que el proyecto es el seleccionado. En caso contrario, mediante

el

botón

“browse…”

se

puede

seleccionar otro proyecto a firmar.

Ilustración 35 Creación .apk firmado 2

Paso 3: Si alguna vez se ha firmado una aplicación Android, es posible que se posea ya una firma y no sea necesario crearla. En caso de no tenerla, en este paso, se selecciona la opción “Create new keystore”, se selecciona la ubicación que va a tener y se le asigna un nombre. Por último se ha de definir una Ilustración 36 Creación .apk firmado 3

contraseña con la que validar dicha firma.

83

4 - Verificación y pruebas

Paso 4: Este es el paso en el que el desarrollador ha de proporcionar su información y/o de su empresa para ligarla a la aplicación empaquetada. Cabe destacar, que como mínimo se ha de proporcionar un dato acerca del autor.

Ilustración 37 Creación .apk firmado 4

Paso 5: Este es el último paso a realizar, en este se define el directorio donde se va a ubicar la aplicación una vez firmada y empaquetada en formato .APK. Una vez obtenido el archivo empaquetado, se puede instalar fácilmente en cualquier dispositivo con sistema operativo Android que cumpla los Ilustración 38 Creación .apk firmado 5

requisitos definidos en el AndroidManifest.xml que ya se ha comentado.

A continuación, este archivo empaquetado, se puede enviar de cualquier manera: mail, mensaje instantáneo, por almacenamiento usb,… y una vez dentro del teléfono móvil, instalarlo es cuestión de ejecutar el archivo y aceptar los permisos solicitados. En este punto del proyecto, se considera que la aplicación ya está desarrollada y ha superado todas las pruebas. A demás, ya se ha explicado como empaquetar la aplicación en un formato que permita compartirla con otros usuarios de manera sencilla.

84

Diccionario traductor Android para aprender idiomas

4.3.2 Subida al Market (Google Play) Una manera de compartir una aplicación con los usuarios de Android en general, es la plataforma ligada a este Sistema Operativo llama Google Play Market. A ésta se puede acceder desde web o desde el propio móvil, escoger que aplicación se quiere instalar y instalarla. Además permite desde web realizar el proceso de instalación sin tener que interactuar con el dispositivo móvil, e incluso para usuarios que tienen varios dispositivos móviles gestionar que aplicaciones se tienen instaladas en que dispositivo. Para poder publicar una aplicación en esta plataforma, esta requiere de cierta cantidad de información con el fin de poder

ofrecerla

a

su

público más objetivo. Lo primero que solicita es todo el material gráfico que se pueda facilitar para promocionar la aplicación: capturas

de

pantalla,

logotipo y/o icono, gráfico promocional, capturas de

Ilustración 39 Alta en Market 1

pantalla, etc… A continuación, también solicita información por escrito de la aplicación a publicar, es decir,

título,

categoría,

etc…

descripción, Toda

esta

información, además ha de estar en cada idioma de los que se quiera publicar la aplicación. En

el

caso

del

presente

proyecto, se ha escogido el inglés y el español, en ambos casos, la decisión ha sido Ilustración 40 Alta en Market 2

tomada por el gran alcance

85

4 - Verificación y pruebas

en cuanto a público que tienen ya que entre los dos idiomas se abarca el 60% del público Android. El siguiente grupo de peticiones del formulario, solicita información sobre el público al que va dirigido, tipo de licencia, grado de madurez de la aplicación, si va a ser gratuita o de pago y los países en los que se va a publicar la aplicación. Hay que tener en cuenta que de los países en los que se publique la aplicación, los idiomas en los que se habla en ellos. Es decir, no tiene sentido publicar una aplicación en Japón si los textos

creados

anteriormente

son

únicamente en castellano. Para este proyecto, se han escogido el Castellano y el Inglés como idiomas en los que Ilustración 41 Alta en Market 3

publicar ya que con ellos se abarca aproximadamente

un

60%

del

mercado en la mayoría de los países. Por último, el formulario para publicar una aplicación, solicita información directa sobre el desarrollador para que los usuarios puedan ponerse en contacto con el así como su consentimiento para publicar la aplicación.

Ilustración 42 Alta en Market 4

86

Diccionario traductor Android para aprender idiomas

87

5 - Estudio económico

5 Estudio económico A continuación se procede a detallar el coste que ha tenido el desarrollo de este proyecto. Este coste está dividido entre los materiales precisados tanto para su desarrollo como para su testeo, las horas de ingeniería dedicadas para la definición del proyecto y por último horas de desarrollo invertidas.

5.1 Materiales En cuanto a los materiales utilizados, como en la mayoría de proyectos de software, éste ha consistido en un equipo para poder realizar el desarrollo, 2 dispositivos móviles, un Smartphone y una Tablet sin modificación alguna por parte de la operadora en su sistema operativo y, por último, material gráfico para realización del diseño. El valor a amortizar mensualmente para todos estos dispositivos, se ha calculado dividiendo su coste inicial entre los meses de uso esperado. A continuación se ha multiplicado este valor por 5 meses que se ha considerado como duración del proyecto. Por otro lado, las licencias de software, al ser un proyecto desarrollado con aplicaciones que poseen licencia OpenSource no han comportado coste alguno. Material  

Precio(€)  

Licencias de software

0

Equipo informático

225

Dispositivo móvil para testeo

137.5

Tablet móvil para testeo

208.34

Material gráfico

65

Total

570.84€ Tabla 2 - Materiales necesitados para el desarrollo del proyecto

Equipo informático : 1600€/36meses = 44.4€/mes. 44,4€/m*5meses = 225€ Smartphone: 300€/12meses = 27.5€/mes. 27.5€/mes*5meses = 137.5€ Tablet: 500€/12*5=208.34

88

Diccionario traductor Android para aprender idiomas

5.2 Horas de ingeniería Se definen como horas de ingeniería aquellas que han sido necesarias para la definición del proyecto: definición de la aplicación, fuentes de información que se van a utilizar (API), … En cuanto al precio por hora de ingeniería, se ha realizado una búsqueda de los valores más comunes en presupuestos y se ha definido a partir de los resultados obtenidos quedando en 50€/h. Actividad

Horas

Análisis

de

Coste

aplicaciones 8

400€

existentes Definición del proyecto

5

250€

Diseño del proyecto

25

1250€

Estudio de las APIs de 60

3000€

traducción necesarias para el proyecto Estudio

de

servicios

de 30

1500€

soporte Total

128 Tabla 3 - Detalle horas de ingeniería dedicadas

6400€

89

5 - Estudio económico

5.3 Horas de desarrollo En cuanto a las horas de desarrollo, igual que en el caso anterior, se ha hecho una búsqueda de los presupuestos más comunes para un desarrollados JAVA/Android y se ha obtenido una estimación de 20€/h Actividad

Horas

Coste

15

300€

30

600€

25

400€

20

300€

Maquetación del diseño

60

900€

Creación del Juego

30

200€

180

3600€

Creación de la estructura de pantallas en Android Creación del proxy para la API de WordReference.com Creación de la base de datos SQLite Implementación de Google Analytics

GameTest Total

Tabla 4 - Definición horas de desarrollo

5.4 Rentabilidad Al inicio de este proyecto, se han comentado posibles modelos económicos que existen alrededor de las aplicaciones móviles: -

Venta directa

-

Publicidad

-

Servicios añadidos

-

Ventas in-app

90

Diccionario traductor Android para aprender idiomas

Para la explotación de este proyecto, se ha decidido hacerla mediante las dos primeras opciones, ya que actualmente, no se puede ofrecer ningún servicio añadido y la infraestructura necesaria para realizar ventas IN-APP está fuera de alcance. Para hacer un análisis de rentabilidad de una aplicación Android mediante publicidad, se han utilizado los datos ofrecidos por la web http:// androidappprofits.com que hacen un estudio mensual de 6 aplicaciones (Air Horn Pro, Tazer Pro, Mutt Trainer Pro, Buzz Cut, Text Bomb, Impossiballz). A continuación, se puede observar un resumen de ingresos del mes de abril de 2012 del conjunto de las aplicaciones anteriores: •

Descargas totales: 289,202



Descargas activas: 48,990



Admob Banner Ads: 136,556 Impresiones



Ingresos por mil impresiones (eCPM): $1.05



Ingresos totales: $142.76

Resumen: •

142.76/289,202 = 0,0005centimos de dólar por descarga



142.76/48,990 = 0,003 céntimos de dólar por descarga activa

5.4.1 Escenarios de rentabilidad por publicidad: Para realizar un cálculo estadístico de la rentabilidad de la aplicación desarrollada en este proyecto, se han planteado 2 escenarios. En ellos, se calcula la cantidad de usuarios a partir de una variable denominada factor viral. Este factor es un elemento muy utilizado para el cálculo viral en proyectos relacionados con redes sociales y viene a ser la cantidad de usuarios que se generan a partir de los usuarios ya existentes. Por ejemplo, si en una aplicación se obtienen cada mes 1 usuario por cada 4 de los que ya existen, se considera que hay un factor viral de 1,25. Si Cada mes duplica al anterior, su factor viral sería de 2.

91

5 - Estudio económico

Escenario 1 (factor viral 1.25): Para este primer escenario, se ha partido de la base que se poseen inicialmente 500 usuarios con la aplicación ya que en los días es sencillo captar usuarios al estar al principio de las listas.

mes  

descargas  

1   2   3   4   5   6   7   8   9   10   11   12   13   14   15   16   17   18   19   20   21   22   23   24  

625   781   977   1,221   1,526   1,907   2,384   2,980   3,725   4,657   5,821   7,276   9,095   11,369   14,211   17,764   22,204   27,756   34,694   43,368   54,210   67,763   84,703   105,879  

Descargas   nuevas   625   156   195   244   305   381   477   596   745   931   1,164   1,455   1,819   2,274   2,842   3,553   4,441   5,551   6,939   8,674   10,842   13,553   16,941   21,176  

Ingresos   $1.88     $0.47     $0.59     $0.73     $0.92     $1.14     $1.43     $1.79     $2.24     $2.79     $3.49     $4.37     $5.46     $6.82     $8.53     $10.66     $13.32     $16.65     $20.82     $26.02     $32.53     $40.66     $50.82     $63.53    

Ingreso  acumulado   total   $1.88     $2.34     $2.93     $3.66     $4.58     $5.72     $8.04     $8.94     $11.18     $13.97     $17.46     $21.83     $27.28     $34.11     $42.63     $53.29     $66.61     $83.27     $104.08     $130.10     $162.63     $203.29     $254.11     $317.64    

Tabla 5 - Escenario publicidad 1

Como se puede observar a partir de los resultados de la tabla anterior, por mucho que la aplicación tenga éxito los primeros días, con un factor viral bajo, la aplicación no será rentable con el modelo de publicidad.

92

Diccionario traductor Android para aprender idiomas

Escenario 2 (factor viral 1.5): En este segundo caso, se supone un factor viral más elevado, de cada 3 usuarios uno nuevo (1.5). Este es un factor elevado y requiere de gran comunicación de los usuarios a sus conocidos sobre el proyecto.

mes  

descargas  

Descargas  nuevas  

Ingresos  

Ingreso  acumulado  total  

1   2   3   4   5   6   7   8   9   10   11   12   13   14   15   16   17   18   19   20   21   22   23   24  

750   1,125   1,688   2,531   3,797   5,695   8,543   12,814   19,222   28,833   43,249   64,873   97,310   145,965   218,947   328,420   492,631   738,946   1,108,419   1,662,628   2,493,943   3,740,914   5,611,371   8,417,056  

750   375   563   844   1,266   1,898   2,848   4,271   6,407   9,611   14,416   21,624   32,437   48,655   72,982   109,473   164,210   246,315   369,473   554,209   831,314   1,246,971   1,870,457   2,805,685  

$2.25     $1.13     $1.69     $2.53     $3.80     $5.70     $8.54     $12.81     $19.22     $28.83     $43.25     $64.87     $97.31     $145.96     $218.95     $328.42     $492.63     $738.95     $1,108.42     $1,662.63     $2,493.94     $3,740.91     $5,611.37     $8,417.06    

$2.25     $3.38     $5.06     $7.59     $11.39     $17.09     $8.04     $38.44     $57.67     $86.50     $129.75     $194.62     $291.93     $437.89     $656.84     $985.26     $1,477.89     $2,216.84     $3,325.26     $4,987.89     $7,481.83     $11,222.74     $16,834.11     $25,251.17    

Tabla 6 - Escenario de publicidad 2

Como se puede observar, a partir de los 2 años de lanzamiento, la aplicación comienza a ser rentable. Se ha de tener en cuenta el valor de casi 8,5 millones de usuarios que han de utilizar la aplicación para obtener dicha rentabilidad y que el factor viral especificado (cada dos usuarios generan uno nuevo) es totalmente utópico para una aplicación de este estilo.

93

5 - Estudio económico

5.4.2

Escenarios de rentabilidad de venta:

Como ya se ha comentado, para este proyecto, se ha decidido analizar el marco económico de publicidad en una aplicación, y el marco de venta de una versión profesional de la misma. Para ello, se ha analizado la proporción de descargas gratuitas frente a descargas de pago de una aplicación del mismo autor de este proyecto sobre las que se han realizado los cálculos. Estas descargas vienen a ser, después de un año, de 4825 en la versión gratuita y 327 en la versión profesional. Por lo que la proporción gratuito-venta es de un 7,6%. A partir de este dato y de los factores virales del punto anterior, tenemos: mes   1   2   3   4   5   6   7   8   9   10   11   12   13   14   15   16   17   18   19   20   21   22   23   24  

descargas   538   579   623   671   722   777   837   900   969   1043   1123   1208   1301   1400   1507   1622   1745   1879   2022   2176   2342   2521   2713   2921  

Descargas  nuevas   538   41   44   48   51   55   59   64   69   74   80   86   92   99   107   115   124   133   143   154   166   179   192   207  

Ingresos   $533.31     $40.70     $43.80     $47.15     $50.74     $54.62     $58.78     $63.27     $68.10     $73.29     $78.89     $84.91     $91.38     $98.36     $105.86     $113.94     $122.64     $132.00     $142.07     $152.91     $164.58     $177.14     $190.65     $205.20    

Tabla 7 - Escenario de rentabilidad de venta

Ingreso  acumulado  total   $533.31     $574.01     $617.81     $664.96     $715.70     $770.31     $8.04     $892.37     $960.46     $1,033.75     $1,112.64     $1,197.55     $1,288.93     $1,387.29     $1,493.15     $1,607.10     $1,729.73     $1,861.73     $2,003.80     $2,156.71     $2,321.29     $2,498.42     $2,689.08     $2,894.28    

94

Diccionario traductor Android para aprender idiomas

Como se puede observar en la tabla anterior, el modelo de venta es también muy poco rentable, pero a partir del doceavo mes desde su publicación, genera unos ingresos cercanos a los 100€/mes.

5.5 Resumen y conclusión económica Concepto

Horas

Valor/hora

Coste

Materiales

--

--

570.84€

Horas de ingeniería

128

50

6400€

Horas de desarrollo

180

20

3600€

Total

303

10.570,84€

Tabla 8 - Resumen costes proyecto

A partir de estos resultados, está claro que es muy difícil que la aplicación sea rentable, o por lo menos los ingresos a dos años deberían ser bastante elevados para llegar al punto de inflexión en menos de 3 años. Como ya se ha visto, con el fin de calcular la rentabilidad del proyecto se han realizado varias pruebas en las que se han modificado la viralidad del proyecto para, a partir de unos ingresos medios, saber que condiciones serían optimas. El resultado obtenido, es que requeriría de gran cantidad de descargas con el fin de que sea rentable.

6 - Conclusiones

95

6 Conclusiones El objetivo inicial de este proyecto viene a partir de la idea de generar una aplicación móvil en plataforma Android y de este modo poder realizar un estudio en profundidad de este sector tanto a nivel técnico como a nivel económico. La aplicación, que como ya se ha visto, se trata de una herramienta de traducción que ofrece a su vez un sencillo ejercicio al usuario que le permite memorizar las palabras buscadas y de este modo mejorar su vocabulario. En referencia a la parte técnica del proyecto, cabe destacar los problemas que de trabajar con servicios externos como la API de Google Translate o cualquier otra. De este modo, el desarrollador tiene que estar pendiente de cambios en el protocolo del servicio para que la aplicación funcione correctamente. Además, el servicio puede cambiar sus condiciones, lo cual afectaría a la base del funcionamiento del proyecto. En el caso actual, el servicio de Google Translate cambió de ser gratuito a de pago en poco mas de 6 meses, por lo que se han tenido que buscar alternativas gratuitas que permitan alcanzar el objetivo del proyecto, como WordReference, que a pesar de ofrecer más información por traducción, es muy limitado en cuanto a pares de idiomas se refiere. Por otro lado, la plataforma Android y su marco de trabajo, se han mostrado como una buena herramienta, bastante sencilla de utilizar y de escalar. Las mayores dificultades encontradas, se han dado, sobretodo, en el área visual de la aplicación. En un desarrollo Android, se ha de tener en cuenta que el mismo desarrollo va a aparecer en multitud de dispositivos y con diferentes tamaños de pantallas, desde las 3” de un teléfono hasta las 10,1” de una tablet, por lo que los diseños han de ser adaptativos. En el marco económico del proyecto, se ha realizado un pequeño estudio de la rentabilidad del mismo, y se ha demostrado que es muy difícil obtener gran rentabilidad económica de una aplicación media. Para solventar esta circunstancia, es preciso generar acciones que por un lado incrementen notablemente el número de descargas, ya sean de publicidad o por venta, y por otro incrementar los ingresos producidos en cada modelo.

96

Diccionario traductor Android para aprender idiomas

7 - Ampliaciones y mejoras

97

7 Ampliaciones y mejoras Como ya se ha visto, la aplicación desarrollada en este proyecto se trata de una versión de estudio, más teórica que práctica en el marco de trabajo de las aplicaciones móviles. A pesar de ello, los resultados obtenidos durante las pruebas realizadas con usuarios reales, indica gran engagement de cara a los usuarios, ya que el feedback obtenido por los mismos ha sido bastante positivo. Por tanto se ha decidido hacer ciertas ampliaciones: Mejorar y ampliar los juegos Uno de los elementos más interesantes del proyecto es precisamente el y los posibles juegos que se puedan realizar con las palabras buscadas. El juego ofrecido (GameTest), es un juego totalmente educativo y no se puede considerar precisamente como “entretenido”. Es por ello que la ampliación más importante a realizar, es la generación de cómo mínimo 2 o 3 juegos más que ofrezcan esta característica. Mejorar y ampliar funcionalidades de traducción: Por otro lado, se ha considerado como muy interesante el análisis de los pares de idiomas utilizados por los usuarios para ofrecerles mejoras a partir de la información obtenida. Es decir, si el par lingüístico más utilizado, es el de inglés-español, se pueden generar u obtener librerías y funcionalidades exclusivas para este par de idiomas. Social: En el punto de análisis económico, se ha demostrado que para obtener mayores ingresos en la aplicación y para que esta sea lo más rentable posible, es necesaria gran viralidad por parte de la misma. Para ello, una de las herramientas más eficientes hoy en día, son las redes sociales. Por todo esto, se pretende añadir funcionalidades dentro de la aplicación que permitan al usuario compartir con su circulo sus logros dentro de la aplicación: Cuanto ha mejorado su vocabulario en un mes, o cuantas palabras ha buscado, ….

98

Diccionario traductor Android para aprender idiomas

99

8 - Bibliografía

8 Bibliografía [1]

Zigurd Mednieks, Laird Dornin, G.Blake Meike & Masumi Nakamura

-

Programming Android - O’REILLY [2]

Marko Gargenta - Learning Android - O’REILLY

[3]

Lauren Darcey, Shane Conder – Android Application Development - SAMS

[4]

http://market.android.com - Android Market – mayo 2012

[5]

http://bit.ly/Lgj84N - Español Traductor / Diccionari - mayo 2012

[6]

http://bit.ly/ug29NA - Traductor de Google - mayo 2012

[7]

http://bit.ly/LvVVvY - Translate - mayo 2012

[8]

http://bit.ly/Korlrd - Inglés Traductor – mayo 2012

[9]

http://bit.ly/L0e4EM - El Traductor de viaje – mayo 2012

[10] http://code.google.com/apis/language/translate/overview.html

-

Google

Translate - marzo 2012 [11] http://code.google.com/apis/language/translate/v2/getting_started.html – Google Translate - febrero 2012 [12] http://en.wikipedia.org/wiki/Representational_State_Transfer – Wikipedia mayo 2012 [13] http://code.google.com/p/google-api-translate-java/ - Google Translate – enero 2012 [14] http://www.wordreference.com/docs/api.aspx – WordReference - enero 2012 [15] http://blog.mobclix.com/index/PDF/120112_mobclixx_holiday_shopping_infogr aphic.pdf - Mobclix - Junio 2012 [16] http://blog.mobclix.com/2011/02/10/mobclix-index-monthly-value-of-an-appuser/ http://bit.ly/gAShXx – Mobclix - Mayo 2012 [17] http://androidappprofits.com/ - Android APP profits – Junio 2012

100

Diccionario traductor Android para aprender idiomas

9 - Contenido del CD

9 Contenido del CD •

Portada del proyecto



Memoria del proyecto en formato PDF



Diseños o Diseño global en PSD o Pantalla inicio en PNG o Pantalla Juego GameTest en PNG o Pantalla todas las palabras buscadas en PNG o Pantalla palabras no aprendidas en PNG o Pantalla settings en PNG



Imágenes o Imágenes del menú o Botones de aplicación o Fondos



Código de la aplicación



Aplicación empaquetada en formato APK

101

102

Diccionario traductor Android para aprender idiomas

View more...

Comments

Copyright ©2017 KUPDF Inc.
SUPPORT KUPDF