Rastreador GPS con J2ME

Hace algun tiempo adquiri un telefono celular el cual incluia gps integrado y otras funcionalidades que me permitian ubicar a traves de un mapa proporcionandome una posicion relativamente aproximada de acuerdo a la latitud y longitud en la que me encuentro con el celular.

Siendo este servicio de posicionamiento una herramienta verdaderamente util para muchos propositos, decidi profundizar un poco en el tema y se me ocurrio por que no utilizar las coordenadas que el gps integrado de mi celular me esta ofreciendo y enviarlas a un servidor para almacenarlas en una base de datos para luego ser visualizadas en un computador a traves de un mapa y de esa manera ya no tengo que estar siempre al lado de mi celular para saber donde me encuentro, sino que puedo dejarlo en un carro o entregarselo a otra persona que este de excursion a algun lugar distante y asi poder localizarlo facilmente. Interesante la idea cierto!.

Bien para la realizacion de la aplicacion movil he utilizado el framework para j2me de netbeans 7.1.1, y el celular del cual dispongo es un nokia e71 el cual posee gps integrado y gps asistido (a-gps) o basado en la red, ademas dicho telefono posee soporte java ME. MIDP 2.0, CLDC 1.1.

la aplicacion final a instalar en el celular posee una interfaz sencilla similar a la siguiente imagen:

Comencemos entonces a elaborar nuestra aplicacion…

Bueno amigos, debo explicar lo siguiente, para que nuestra aplicacion se pueda comunicar con un servidor web, necesitamos elaborar un WebService o servicio web que en un post anterior he explicado como se crea (Crear WebService), por tal motivo omitire la mayoria de los pasos a seguir y solamente les comentare lo siguiente:

*) crear un nuevo proyecto en netbeans de tipo Java web Application

 

luego presionamos siguiente y le colocamos como nombre webserviceGPS, hacemos clic nuevamente sobre el boton siguiente y seleccionamos como servidor el apache tomcat que tengamos instalado (yo en mi caso tengo el apache tomcat 6.0.26 ya que el webservice lo he creado con la version 6.9.1 de netbeans)

Por ultimo presionamos el boton terminar.

Bien, una vez creado nuestro proyecto y antes de continuar debemos agregar la referencia de mysql (que es la que interactuara con nuestro motor de base de datos) la cual debe ir en una carpeta llamada lib dentro del directorio de los proyectos de netbeans que comunmente se encuentra en mis documentos, la ruta completa de la carpeta lib que contiene a la libreria es:

Documentos/NetBeansProjects/WebServiceGPS/web/WEB-INF/lib tal y como se puede observar en la siguiente imagen:

Ahora pasamos a netbeans y agregamos la referencia de la libreria a mysql haciendo clic derecho sobre el proyecto y en el menu contextual que aparece seleccionamos la opcion propiedades:

Luego, en la ventana que aparece seleccionamos de las opciones de la parte izquierda la que dice libraries, luego presionamos el boton add jar/folder y por ultimo buscamos dentro de la carpeta lib de nuestro proyecto de netbeans la libreria de mysql que habiamos agregado al proyecto, por ultimo hacemos clic sobre el boton abrir, los pasos se pueden ver en la siguiente imagen:

Luego de esto presionamos el boton aceptar de la imagen del fondo:

Listo, con esto ya esta agregada correctamente la libreria de mysql a nuestro proyecto de netbeans; ahora si creemos el webservice, pero primero hay que crear un paquete el cual contendra nuestro web service, nuestro paquete se llamara Rastreador, despues de esto si podemos crear el web service de la siguiente manera:

hacemos clic derecho sobre el paquete y en el menu contextual que aparece seleccionamos la opcion nuevo y en el siguiente submenu escojemos la opcion Web service asi como se puede ver en la siguiente imagen:

Ahora en la ventana que nos aparece escribimos el nombre de la clase que a la vez es el nombre del servicio web, cuyo nombre sera servicio_gps y por ultimo presionamos el boton terminar asi como se observa en la siguiente interfaz:

Bien ahora si esta creado “oficial mente” nuestro servicio web, ahora hay que definirle los metodos y procedimientos que realizara; pero antes no nos olvidemos de la base de datos la cual almacenara las coordenadas que el celular va a enviar, para ello abrimos nuestro administrador de base de datos (yo en mi caso uso el app serv) y creamos una nueva base de datos llamada coordenadas_gps, luego creamos una tabla llamada datos con los siguientes campos :

id, latitud, longitud, estado, cuyo tipo de datos se puede ver en la siguiente imagen:

Luego de haber creado la tabla con sus respectivos campos volvemos a netbeans y programamos nuestro webservice el cual solo contendra un metodo llamado  insertarDatos que recibira como parametros la latitud, longitud y un estado enviados por el celular, el codigo completo del servicio web es el siguiente:


package Rastreador;

import javax.jws.WebService;

import java.io.*;

import java.sql.*;

import javax.jws.WebMethod;

import javax.swing.JOptionPane;

@WebService()

public class servicio_gps {

private String latitud;

private String longitud;

private String estado;

//---------------comienzo procedimiento para insertar datos----------------

@WebMethod

public boolean insertarDatos(String lat,String longi,String est){

String conexionBD="jdbc:mysql://127.0.0.1/coordenadas_gps";

Connection conexion=null;

boolean funciono=false;

String con;

try{

// JOptionPane.showMessageDialog(null,"entro");

Class.forName("com.mysql.jdbc.Driver");//el driver de mysql

conexion=DriverManager.getConnection(conexionBD, "root","12345");//conexion a la base de datos

Statement s = conexion.createStatement();

// JOptionPane.showMessageDialog(null,no+" "+ap);

con= "INSERT INTO DATOS VALUES (NULL,'"+lat+"','"+longi+"','" + est +"')";

s.executeUpdate(con);

funciono=true;

}

catch(Exception e){

System.out.println("No se ha completado la petición...");

}

return funciono;

}

}

Bien, con esto ya esta listo el webservice, ahora solo basta ejecutarlo y mantenerlo corriendo en el servidor para que la aplicacion movil pueda encontrar dicho servicio web; para ejecutarlo, primero hay que seguir los siguientes pasos:

1) hacer clic derecho sobre el proyecto y escoger la opcion limpiar y construir

2)despues hacer clic derecho nuevamente sobre el proyecto y escoger la opcion Deploy

3)Por ultimo nos dirigimos a la carpeta Web Service de nuestro proyecto y presionamos clic derecho sobre el servicio web que hemos creado (llamado servicio_gps) y en el menu contextual que aparece seleccionamos la opcion Test Web Service tal y como se ve en la siguiente imagen:

automaticamente se despliega una ventana en el navegador con la informacion del webservice como la que se ve a continuacion:

Listo, con esto damos por terminado la parte del servidor, es decir, la del servicio web, ahora pasamos a la parte del cliente o la aplicacion movil en j2me a realizar.

Inicialmente aqui, creamos un nuevo proyecto de tipo Mobile Application, como se puede ver en la imagen:

Presionamos el boton siguiente y escribimos el nombre del proyecto (el cual es Localizador GPS) y presionamos el boton terminar:

Bien ahora estando en el nuevo proyecto de j2me nos dirigimos a la pestaña screen de nuestro midlet y elaboramos un diseño de controles similar al de la siguiente imagen:

aqui agregamos 3 textfield, para visualizar la latitud, longitud y el estado que corresponde a un mensaje que indica si se pudo conseguir las coordenadas o si hubo algun fallo, ademas tambien se han agregado 2 okcommand, 1 para llamar a la funcion que trae las coordenadas y el otro para invocar una funcion que hace uso del webservice y manda las coordenadas al servidor quedando almacenadas en la base de datos.

Ahora agreguemos el webservice a la aplicacion de j2me; para ello hacemos clic derecho sobre el proyecto y seleccionamos la opcion nuevo y la subopcion Java ME web Service Client, asi como se observa en la siguiente imagen:

Despues, en la nueva ventana que aparece pegamos la ruta del webservice en el servidor que es: http://localhost:8084/WebServiceGPS/servicio_gps (cabe aclarar que en lugar de localhost se debe escribir la direccion ip del servidor para que al implementar una red o subir el servicio web a un servidor remoto se pueda localizar desde el celular) y presionamos el boton Retrieve WSDL para que extraiga la informacion especifica del webservice, por ultimo presionamos el boton Terminar tal y como se ve en la siguiente interfaz:

Bien ahora que hemos agregado el webservice correctamente a la aplicacion, procedemos a pasar a la seccion de codigo.

nuestro middlet debe tener los siguientes imports:

import javax.microedition.midlet.*;

import javax.microedition.lcdui.*;

import javax.microedition.location.Coordinates;

import javax.microedition.location.Criteria;

import javax.microedition.location.Location;

import javax.microedition.location.LocationProvider;

import javax.microedition.midlet.MIDlet;

import servicio_gps.servicio_gpsService_Stub;

Luego, creamos un procedimiento el cual se encargara de buscar las coordenadas y se llamara: traer_posicion()

public void traer_posicion() throws Exception

{

String string1="",string2="",error="";

int ind=0;

Location l;

LocationProvider lp;

Coordinates c;

// Set criteria for selecting a location provider:

// accurate to 500 meters horizontally

Criteria cr= new Criteria();

cr.setHorizontalAccuracy(500);

// Get an instance of the provider

lp= LocationProvider.getInstance(cr);

// Request the location, setting a one-minute timeout

l = lp.getLocation(60);

c = l.getQualifiedCoordinates();

ind=0;

if(c != null ) {

// Use coordinate information

double lat = c.getLatitude();

double lon = c.getLongitude();

string1 = ""+ lat;

string2="" + lon;

ind=1;

error="Coordenadas listas!";

} else {

error ="Posicion No triangulada";

}

this.textField_latitud.setString(string1);

this.textField_longitud.setString(string2);

this.textField_estado.setString(error);

}

ahora, es necesario que invoquemos a dicho procedimiento para que realice sus procesos de posicionamiento, asi que pasamos a la pestaña screen de la aplicacion y hacemos clic derecho sobre el okcommand y seleccionamos la opcion Go to Source como se puede apreciar en la siguiente imagen:

Bien, entonces a la seccion de codigo que nos lleva, llamamos al procedimiento traer_posicion() encerrado en clausulas try cath:

try {

traer_posicion();

}

catch (Exception e)

{

this.textField_estado.setString("Error Iniciando");

}


A continuacion, volvemos a la pestaña screen de la aplicacion y presionamos clic derecho sobre el otro okcommand u okcommand1 y en el menu contextual que aparece sele sionamos la opcion Go To Source:

Luego a la seccion de codigo que nos lleva esta opcion colocamos lo siguiente para invocar al webservice y llamar al procedimiento InsertarDatos:

try{

servicio_gps.servicio_gpsService_Stub sw=new servicio_gpsService_Stub();

String lati,longi,est;

lati=String.valueOf(this.textField_latitud.getString());

longi=String.valueOf(this.textField_longitud.getString());

est=String.valueOf(this.textField_estado.getString());

boolean salida;

salida=sw.insertarDatos(lati,longi,est);

if(salida==true){

this.textField_estado.setString("Coordenadas Enviadas!");

}else{

this.textField_estado.setString("Coordenadas No Enviadas!");

}

}

catch(Exception e){

}


Listo, ya hemos terminado nuestra aplicacion movil, es el momento de ponerla a prueba, entones la ejecutamos y probamos las opciones:
al ejecutar la aplicacion observaremos la siguiente ventana del emulador de netbeans 7.1.1:

ahora presionamos el boton correspondiente a la opcion Mi posicion y veremos unas coordenadas por default que utiliza el emulador y el mensaje correspondiente al estado indicando que el proceso se ha realizado sin problemas:

Luego, al preisionar la opcion menu veremos que nos aparece la otra opcion que envia los datos al servidor, seleccionamos la que dice enviar posicion:

para efectuar el envio, presionamos el boton central del telefono del emulador y si todo sale bien oservaremos los siguientes resultados:

Podemos verificar que efectivamente los datos de posicionamiento fueron guardados correctamente en la base de datos a traves de la siguiente imagen:

Ahora, para realizar la prueba directamente con el celular y no con el emulador es necesario solo hacer un cambio a la aplicacion j2me y es colocar la direccion ip del servidor en lugar de localhost a la ruta del webservice, por ejemplo: mi equipo tiene la direccion ip 192.168.137.1 y esta como servidor asi que la ruta completa del webservice sera: http://192.168.137.1:8084/WebServiceGPS/servicio_gps por lo tanto, debemos suprimir el webservice (si ya esta agregado) y volverlo a agregar nuevamente y en el campo de texto junto al boton Retrieve WSDL vamos a colocar la ruta del servidor que posee el webservice indicando la direccion ip como se observa en el ejemplo anterior.

Listo, despues de haber hecho esto le instalamos la aplicacion al celular y procedemos a ejecutarla (hay que recordar que si se trata de una red LAN, el celular debe estar unido a la red mediante wifi y asi poder enviar datos al servidor), luego seguimos los mismos pasos observados segun el emulador y se puede ir constatando los resultados almacenados en la base de datos.

Bien, a continuacion les presento un ejemplo en el que pongo a prueba la aplicacion desde mi telefono movil, primero elimino o suprimo el webservice que habia agregado al principio y procedo a agregarlo nuevamente, pero en lugar de escribir localhost (en la url) coloco la direccion ip que en la red en la que me encuentro es: 192.168.137.1, la podemos ver en la siguiente imagen

ademas podemos verificar desde el navegador que colocando dicha ip junto con el nombre del servicio web en el navegador podemos observar la informacion de la wsdl (dejamos esta pagina abierta para que el celular pueda encontrar el servicio web)

tambien se puede ver que en el webservice agregado a la aplicacion de j2me se observa la direccion ip a la que hara referencia la aplicacion para interactuar con dicho servicio:

Luego vamos a generar nuestro proyecto con las nuevas configuraciones que le hemos colocado, para ello hacemos clic derecho sobre el proyecto y en el menu contextual que aparece seleccionamos la opcion que dice: limpiar y construir (“Clean & Build”)

Despues de esto entramos a la carpeta dist de nuestro proyecto en netbeans y seleccionamos el jar que se va a instalar en el celular

Bien, entoces despues de haber instalado la aplicacion en el celular la ejecutamos, yo en mi caso que uso el nokia e-71 observaremos los siguientes pantallazos:

Imagen 1.

Seleccionamos la aplicacion en la carpeta instalaciones del celular

Imagen 2.

Ejecutamos la aplicacion

Imagen 3.

Presionamos la opcion menu y luego escogemos el item Mi Posicion

Imagen 4.

El telefono solicita permiso para acceder a los datos de posicionamiento, escogemos si

Imagen 5.

Resultados de los datos de posicionamiento global (GPS), Coordenadas en Latitud y Longitud

Imagen 6.

Presionamos nuevamente la opcion menu y escogemos el item enviar posicion para transferirlos a la base de datos del servidor

Imagen 7.

El Telefono solicita permiso para que la aplicacion use la red y envie o reciba datos, escogemos si

hay que recordar seleccionar el punto de acceso wifi u otro al que estemos conectado a la red

Imagen 8.

Se muestran las coordenadas gps y el estado del proceso realizado

Si todo sale bien se muestra el mensaje Coordenadas Enviadas!

Por otra parte, se puede constatar que la aplicacion realmente envio los datos accediendo a la base de datos y observar si existe un nuevo registro tal y como se ve en la siguiente interfaz que registra las coordenadas de mi ubicacion.

Por ultimo, se puede utilizar google maps para visualizar las coordenadas que nos ha enviado la aplicacion copiando la latitud y longitud en el cuadro de busqueda de google (separadas por “,”) tal y como se ve en la siguiente imagen:

Bueno eso es todo por ahora ya que este proyecto no termina aqui, pues solo hemos elaborado la parte del servicio web y la parte cliente del dispositivo movil o celular, ahora hay que elaborar una aplicacion de escritorio en la cual se este consultando constantemente la base de datos para ver si hay nuevos datos y si es asi ubicarlos en un mapa, pero eso corresponde a otra entrada la cual complementara este tema.

espero y les resulte de interes este tema y que le pueda servir de guia a quien lo necesite.

Para descargar las apliaciones realizadas puedes usar los siguientes links:

* WebService creado en Java con Netbeans 6.9.1: Descargar

* Aplicacion Movil en J2ME creada en Netbeans 7.1.1: Descargar

*Base de datos creada en MySql:Descargar

Anuncios

11 respuestas a “Rastreador GPS con J2ME

  1. excelente tutorial, es algo para destacar, seria interesante que el teléfono trasmita la posición cada 30 segundos por gprs para así lograr un seguimiento online del mismo. si necesitan ayuda con desarrollo de google maps para el seguimiento online o vista de recorridos anteriores puedo darles una mano

  2. Hola sergio leyendo tu ofrecimiento quisiera hacer un proyecto de gps con google mps quizá te puedas contactar para que me puedas ayudar mi correo luisvt_61 @ hotmail.com

  3. Estimado un gusto saludarte. Me podrías indicar si los modelos de Samsung u otros teléfonos, o equipos modem con vos q se pueda utilizar para programar. Quiero poner un control a mi vehículo. Gracias post buenísimo

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s