JSR-179 Location API para J2ME: Posicionamiento geográfico en nuestras aplicaciones.

JSR-179 Location API para J2ME: Posicionamiento geográfico en nuestras aplicaciones (GPS)

Introducción.

En este tutorial vamos a hacer una introducción teórico/práctica al API definido por la Location API JSR 179 (para terminales móviles) mediante el cual podremos realizar aplicaciones con funcionalidad relacionada con la posición geográfica del dispositivo.

Posteriormente, después de hacer una introducción sobre las características más importantes de la misma, realizaremos una aplicación que podremos instalar en nuestro dispositivo móvil que nos ofrecerá nuestra posición geográfica así como la velicidad a la que nos movemos y la distancia que vamos recorriendo.

Antes de proseguir decir que para poder obtener la posición de un dispositivo móvil, este no tiene por que tener GPS, existen otrás tecnologías o servicios para conseguirlo.
Por ejemplo, las operadoras pueden ofrecer este servicio previo pago: Este API te abstrae del método y es válido para todos.

Otra información interesante:

Características funcionales

  • A través de la clase LocationProvider el usuario puede obtener la posición geográfica del terminal (objetos Location que contienen las coordenadas geográficas Coordinates).
  • Los objetos Location contienen las coordenadas representadas como longitud, latitud y opcionalmente otros datos como la altitud, la calle, el país, la ciudad, etc. (objetos AddressInfo).
  • El usuario puede registrar en LocationProvider una o varias clases que implementen la interfaz LocationListener para ser notificados cuando la posición geográfica del terminal cambie.
  • El usuario puede conocer la orientación del terminal respecto al norte, clase Orientation.
  • El usuario puede registrar en LocationProvider una o varias clases que implementen la interfaz ProximityListener para ser notificados cuando la posición geográfica del terminal se acerque a una determinada posición que especificaquemos.
  • El usuario puede leer, escribir, crear y eliminar posiciones geográficas Coordinates asociadas a un nombre LandMark y clasificarlos en categorías (colegios, restaurantes, etc)
  • El usuario puede saber la velocidad de desplazamiento del terminal Location.getSpeed()

Aspectos de seguridad:

Los siguientes permisos están realizacionados con la localización (sólo es necesario especificar el primero de ellos para la aplicación de ejemplo que veremos a continuación)

  1. javax.microedition.localizacion.Location
  2. javax.microedition.localizacion.Orientation
  3. javax.microedition.localizacion.ProximityListener
  4. javax.microedition.localizacion.LandmarkStore.management
  5. javax.microedition.localizacion.LandmarkStore.read
  6. javax.microedition.localizacion.LandmarkStore.write
  7. javax.microedition.localizacion.LandmarkStore.category

Un ejemplo

Ampliar imagen

Ampliar imagen

Como complemento teórico de lo expuesto anteriormente vamos a realizar una pequeña aplicación autocomentada que nos proporcione la siguiente información cada 5 segundos:

  1. Estado actual del proveedor de localización (Disponible, fuera de servicio, etc).
  2. Distancia recorrida (en metros) desde que se inicio la aplicación.
  3. La velocidad (en metros/segundo) a la que nos desplazamos.
  4. Nombre de la calle actual en la que nos encontramos.
  5. Longitud y latitud en la que nos encontramos.

A continuación os dejo el código fuente para que realices tus pruebas. Código fuente del proyecto (Netbeans).

 

Aunque no todas las implementaciones devuelven información textual sobre la posición geográfica (calle xxxxxxx, nº xxx, ciudad: xxxx, …). Gracias a otras herramientas como Google Maps es posible obtener esta información a partir de la latitud y longitud (las implementaciones están obligadas a proporcionarnos).

Observe la imagen de la derecha para ver como conseguirlo.

La clase principal de la aplicación (MIDlet):

Ventana principal de la aplicación

Referencias

Conclusiones

Como podeis ver con poco esfuerzo se puede realizar aplicaciones en donde es necesaria la posición geográfica del terminal.
El API es bastante ligero en cuento número de clases e interfaces, está bien documentado por lo su aprendizate es bastante sencillo.

Fusionando esta y otras tecnologías como las que se enumeran a continuación se pueden crear todo tipo de aplicaciones, por ejemplo, podríamos crear fácilmente una aplicación que al recibir un sms enviará la posición geográfica del receptor (cierta similitud con Google Latitude e Ipoki).

  1. J2ME Push Registry. Activación automática de MIDlets.
  2. J2ME, Java Wireless Message API (WMA).
  3. J2ME, FileConnection API. Acceso a tarjetas de memorias desde MIDlets.
  4. LWUIT: Una librería gráfica tipo AWT o Swing para J2ME.
  5. J2ME. Internacionalización de aplicaciones para móviles.
  6. Establecimiento de conexiones HTTP desde un MIDLET.

Y como no, pensando un poco en el futuro… seguramente en poco tiempo todos tendremos un GPS en nuestro bolsillo.

Bueno eso es todo, un saludo,
Carlos García. Creador de MobileTest, un complemento educativo para los profesores y sus alumnos.
cgpcosmad@gmail.com, Autentia