Los primeros
objetivos propuestos para esta aplicación fueron los siguientes:
- Desarrollar una aplicación Android, que traduzca los mensajes de la bandeja de entrada a código Morse a través de vibraciones.
- Investigar cómo acceder a los mensajes y extraerlos de la bandeja de entrada.
- Conseguir coger el texto adecuado de cada mensaje.
- Enseñar los mensajes por pantalla para que el usuario pueda seleccionar el que quiera.
- Traducir la cadena de caracteres elegida a código Morse.
- Desarrollar una aplicación Android, que traduzca los mensajes de la bandeja de entrada a código Morse a través de vibraciones.
- Investigar cómo acceder a los mensajes y extraerlos de la bandeja de entrada.
- Conseguir coger el texto adecuado de cada mensaje.
- Enseñar los mensajes por pantalla para que el usuario pueda seleccionar el que quiera.
- Traducir la cadena de caracteres elegida a código Morse.
Lo primero que hicimos fue crear
un programa capaz de acceder a los mensajes y que nos pasara a un TextView los
mensajes para poder traducirlos. En un primer momento intentamos acceder con
los métodos de la clase Intent, pero no éramos capaces de acceder a los
mensajes de esta forma.
Tras buscar posibles soluciones encontramos una más sencilla, el uso de la clase Cursor, con la que se puede acceder a los mensajes y a otros servicios de Android a través de la instrucción:
Uri uri = Uri.parse("donde quieras acceder");
cur =
getContentResolver().query(uri, null, null, null,null);
Para acceder a mensajes lo que teníamos que hacer era añadir Uri.parse("content://sms/inbox”), y así conseguimos acceder a la bandeja de entrada de los mensajes del dispositivo.
Para acceder a mensajes lo que teníamos que hacer era añadir Uri.parse("content://sms/inbox”), y así conseguimos acceder a la bandeja de entrada de los mensajes del dispositivo.
Para extraer el cuerpo del mensaje y el número de teléfono del usuario que nos manda el mensaje tenemos que hacerlo mediante el método getString a la columna correcta donde se encontraba el dato que queríamos. Pero aquí nos encontramos con un problema ya que nos dimos cuenta que esa columna no es la misma para cada uno de los dispositivos Android, por eso en vez de poner una constante, obtuvimos mediante el método (getColumnIndex()), la columna donde se encontraba el número de teléfono y el cuerpo del mensaje (variable para cada dispositivo). Finalmente decidimos que la fecha también pues era un parámetro importante para el usuario.
Una vez hecho esto, solo teníamos que pasar al TextView
con setText() la cadena de caracteres, y presentarlo en la pantalla de
nuestra aplicación.
Ya habíamos conseguido acceder a los mensajes. Ahora
teníamos que poder seleccionar un mensaje de la lista y traducirlo a
vibraciones. Para que pudiésemos seleccionar un mensaje de la lista vimos
necesario implementar un ListView, que te proporciona una lista de elementos
que puedes seleccionar, ya que era más sencillo que un conjunto de text Views.
Para crear un ListView era necesario también crear un
ArrayAdapter, donde tiene que estar incluida la lista de elementos que va a
mostrar el ListView. Para crear este ArrayAdapter tuvimos algunos problemas ya
que no sabíamos que parámetros te pedían en el constructor. Una vez conseguido
buscando a través de Internet, al ejecutarlo en el emulador de Eclipse, nos
salía un NullPointerException, y no entendíamos el porqué. Nos dimos cuenta que
la razón era porque el emulador no tenía ningún
mensaje, y por lo tanto no se creaba una lista de elementos, haciendo
que fuese null la lista y el ListView no la pudiera representar.
Una vez probada en el móvil, ya vimos que funcionaba
perfectamente hasta el momento.
El siguiente paso era definir qué hacer cuando seleccionabas un elemento de la lista. Lo único que queríamos que hiciese por ahora es que cuando “dásemos” pusiese seleccionado, para comprobar que funcionaba. Pensamos que teníamos que poner el mismo método que usábamos cuando pulsamos un botón, setOnClickListener(), pero nos dimos cuenta de que no era así, ya que era un elemento de una lista, no un botón, por tanto el método que había que usar era:
lista.setOnItemClickListener(new OnItemClickListener() {
public void
onItemClick(AdapterView<?> a, View v, int position, long id) {
Éste nos permite realizar cualquier acción al pulsar un
elemento de la lista, la cual la tenemos que definir (en nuestro caso,
traducción a código Morse de la cadena de caracteres deseada), y además
podíamos distinguir entre posiciones con el parámetro position.
Después de haber conseguido esto, solo nos quedaba
traducir el mensaje a código Morse. Buscando encontramos que ya había hechos
algunos código que traducían a código
Morse. El que más nos gustó fue el de Android developers, al cual le pasas un
String como parámetro y te lo traduce a vibraciones.
Ya habíamos terminado la aplicación, pero nos dimos cuenta que el traductor solo tenía las letras básicas (no tenía la ñ) y no tenía ningún signo como el guión, el punto… Por eso añadimos al código de Android developers algunos caracteres más: “ñ”, “.”, “,”, ”?”, “!”, “-“, “:”; cambiando el código inicial.
Con ello decidimos también tratar las vocales con acentos, es decir, el código inicial las trataba como caracteres desconocidos y nosotros los que hicimos fue hacer que las vocales con acentos fuesen tratadas como vocales sin éstos.
Además, nos encontramos con un error en el código, ya que
si ponías un parámetro desconocido, en vez de no vibrar, vibraba como si fuese
un punto (en código Morse) por cada carácter desconocido, es decir, como la “e”
en código Morse, creando confusión. Esto se producía porque si no reconocía un
carácter, dejaban un espacio (GAP), y lo añadían al array de los parámetros de
vibración, sin darse cuenta que el GAP, en el patrón de vibración se ponía en
los huecos de vibración del patrón y por lo tanto vibraba el tiempo que tendría
que estar en “silencio”. Para solucionarlo lo que hicimos fue añadir al array
de no reconocer caracteres un 0 en vez de un tiempo de GAP.
Para que la aplicación no forzase cierre cuando en el
dispositivo no hubiese mensajes lo que hicimos es que cuando no hay mensajes te
muestre un elemento de la lista que ponga “no hay mensajes”, y si lo pulsamos
el dispositivo vibra durante 500ms, para que la persona sepa que no hay
mensajes.
Los mensajes los mostrábamos con la siguiente estructura y
es la cadena de caracteres que se traducía a código Morse:
"Mensaje del telefono: nº de teléfono. Con fecha: fecha y con contenido: cuerpo del mensaje”
Se muestra a continuación la primera interfaz gráfica:
Después de hacer este programa nos dimos cuenta de que no
era del todo funcional para las personas sordo ciegas (a las que iba dirigida
la aplicación), ya que tenían que seleccionar el mensaje tocando en una parte
concreta de la pantalla y no sería útil para ellos, por eso pensamos otra
manera de implementarlo seleccionando los mensajes de una forma diferente.
Próximos objetivos:
- Adecuar la aplicación de traducción de mensajes a código Morse para que sea funcional para las personas sordo-ciegas.
- Realizar una batería de pruebas con diversas situaciones de uso de la aplicación y limpiar esos posibles errores, como hicimos con la aplicación AudioSense.

No hay comentarios:
Publicar un comentario