lunes, 27 de febrero de 2012

API de Android - Paquetes importantes para mi Aplicación

Para el proyecto de Dispositivos Móviles, haré uso de Android como plataforma para programar. Por lo tanto, es necesario conocer las herramientas con las que cuento, y para esto, en esta entrada me dedicaré a escribir sobre los paquetes importantes que encontré que me puedan ayudar a desarrollar mi proyecto.

Inicialmente, nombraré las partes del celular que se harán uso(tentativamente). 
(Nota: SÍ, es requisito que sea un celular, ya que la app hará uso de telefonía para comunicarse con emergencias y otros números telefónicos importantes)

Partes importantes que se harán uso en el celular:
  • GPS
  • Telefonía
  • Mensajería(SMS)
  • Base de datos con las coordenadas de los contactos, y sus teléfonos
GPS - android.location

En cuanto a la localización GPS para llamar al hospital o policia más cercano, Encontré el paquete android.location que contiene clases relacionadas con la geolocalización y otros servicios relacionados. Aquí  mostraré solo las que considero más importantes para mi proyecto.

Interfaces
GpsStatus.ListenerInterfaz usada para recibir notificaciones cuando se cambia el estado del GPS
LocationListenerUsada para recibir notificaciones cuando la localizacion cambia.

Clases
AddressClase que representa una direccion que es un conjunto de strings que describen una localización.
Criteria
Clase que indica el criterio para seleccionar el proveedor de la localización.
GpsSatelliteClase que representa el estado actual del satélite GPS.
GpsStatusClase que representa el estado actual del motor 
LocationClase que representa una localización geográfica detectada en un cierto tiempo.
LocationManagerClase que provee acceso a los servicios de localización del sistema.

Uso en mi proyecto:

Estas clases sirven para manejar las funciones que se necesitarían en la localización GPS, en caso de implementarlo en mi proyecto. Usando estas clases e interfaces, podría saber cada cuando cambia de estado el GPS para saber si se encuentra en una nueva localización, y actualizar alguna base de datos con los contactos más cercanos para recibir ayuda médica, o de la policía.

También la clase Address, provee información en un string, que podría servir para dar la localización actual a una persona cercana en un mensaje SMS, en caso de otro tipo de emergencia familiar o algo por el estilo.

Telefonía - android.telephony.gsm

Para la parte de telefonía, que requeriría las funciones de llamar, enviar mensajes y algunas otras cosas básicas, encontré el paquete android.telephony.gsm que proporciona clases para manejar algunas funciones de telefonía.

Clases
CellLocationClase abstracta que representa la localización del dispositivo
PhoneNumberUtilsUtilidades para manipular Strings de teléfonos.
PhoneStateListenerClase usada para verificar cambios específicos en los estados de la telefonía del dispositivo.
Signal StrengthClase que contiene información relacionada con la intensidad de señal del teléfono
SmsManagerManeja información sobre operaciones SMS, como mandar datos, mensajes, etc.
SmsMessageServicio de envió de mensajes SMS cortos.
TelephonyManagerClase que provee información sobre los servicios de telefonía en el dispositivo.

Uso en mi proyecto:

La telefonía será una parte importante de mi aplicación. Por lo tanto, es necesario saber con que herramientas cuento para manejar las llamadas y mensajes, y como y a quién se envían esto. Esta clase la tendré que manipular junto con la de GPS para lograr hacer una base de datos de teléfonos y localizaciones, que se actualice cada cierto tiempo, y para así, en el momento de realizar una llamada de emergencia mediante mi aplicación, la aplicación sepa cual es el contacto más cercano para pedir ayuda.

Base de Datos - android.database

Para la base de datos, el API de android tiene el paquete android.database para manejar bases de datos.
Las interfaces y clases importantes son las siguientes:

Interfaces
CursorLa interface provee acceso de escritura-lectura aleatorio al result set que es retornado por la búsqueda en la base de datos
DatabaseErrorHandlerInterface que deja a la aplicación definir las acciones a tomar después de ciertos errores detectados en la base de datos

Clases
ContentObserverRecibe una llamada cuando cambie el contenido.
CursorJoin
Junta dos cursores usando las columnas especificadas.
DatabaseUtilsMetodos estaticos de utilidad para manejar bases de datos y cursores.
DatasetObserverRecibe una llamada cuando un set de datos sufre cambios o es invalido
DefaultDatabaseErrorHandlerClase usada para definir las acciones a tomar cuando una corrupción en la base de datos es reportada por sqlite
MatrixCursorImplementación de cursor mutable respaldado por un arreglo de objetos.

Uso en mi aplicación:

La base de datos será una parte importante de mi proyecto, ya que contendrá en ella la información sobre las coordenadas de los hospitales, contactos, estaciones de policía y sus teléfonos. Esta base de datos sería en el mejor caso actualizada cada que se cambia de localización, lo cual sería cada cierto tiempo como 10 min o algo así. Esto para que en el momento en el que la aplicación se ejecute, ya esté listo el número de teléfono del contacto más cercano.

Voz - android.speech

Una de las cosas que me gustaría implementar, pero sería secundaria en caso de tener tiempo, es un mensaje pre-grabado. Esto podría generar problemas al enviarlo a emergencias, ya que se le daría un mal uso, o podría mal interpretarse, pero aun así me gustaría implementarlo para las llamadas de emergencia a contactos o de otro tipo que no afecte a los servicios de emergencias. De cualquier manera, encontré el paquete android.speech, que maneja funcionalidades relacionadas.

Las clases e interfaces son las siguientes:

Interfaces
RecognitionListenerUsado para recibir notificaciones del reconocedor de voz cuando algún evento relacionado ocurra.

Clases
RecognitionServiceClase base para implementaciones del servicio de reconocimiento.
RecognizerIntent
Constantes para soportar el reconocimiento de voz, iniciando desde un intento.
RecognizerResultsIntentConstantes con intentos relacionados en enseñar los resultados del reconocimiento de voz.
SpeechRecognizerEsta clase provee acceso al servicio de reconocimiento de voz.

Uso en mi aplicación:

Quizás en sí esto no es lo que busco, pero es lo más cercano. Mi idea es utilizar el reconocimiento de voz para grabar un mensaje para cada tipo de emergencia(opcionalmente). Esto para mandarlo a determinados contactos en dicho caso de emergencia si la persona no puede hablar o no tiene tiempo para hacerlo.

Pruebas - junit.framework

Para realizar las pruebas al código, simplemente eso. Existe también un paquete android.test, pero preferí junit por haber trabajado con el anteriormente.

Las clases e interfaces son las siguientes:

Interfaces
TestPrueba a correr para recoger resultados
TestListener
Un listener para el progreso de la prueba.

Clases

AssertSet con mètodos del tipo assert(afirmar)
TestCase
Define un TestCase para correr múltiples pruebas.
TestFailureRecolecta la prueba fallada junto con al excepción arrojada.
TestResultRecolecta los resultados de un determinado TestCase.
TestSuiteUn TestSuite son varias pruebas compuestas.


Errores

AssertionFailedErrorArrojado cuando un assert es fallido.
ComparisonFailure
Arrojado cunado una comparación entre Strings es fallida.



Y esas son los paquetes más importantes a primera vista. También faltaría ver lo que es necesario para programar la interfaz gráfica, que tengo entendido se hace con xml. Pero eso lo veré más adelante.


Referencias:

1 comentario: