You are on page 1of 19

INSTITUTO TECNOLGICO DE CHILPANCINGO

INGENIERA EN SISTEMAS COMPUTACIONALES

Manual Tcnico Practica 1:


Envo y Recepcin De SMS Desde Pc Con Celular

Materia: Desarrollo de Aplicaciones para Tecnologas Mviles Profesor: M. en C. Jos Mario Martnez Castro Alumnos: Juan Carlos Sevilla Snchez /0952078 Adrin Navarrete Blas /09520636

Chilpancingo, Gro., Septiembre de 2013.

ndice
Pgina
1.- COMPROBACIN Y COMPATIBILIDAD DE CELULAR CON HYPERTERMINAL. . . . . . . 2.- DESARROLLO DE LA APLICACIN. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . 3.- FUNCIONALIDAD DE LA APLICACIN. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.1.- PRUEBA PARA ENVIAR SMS. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2.- PRUEBA PARA LEER SMS. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.- CDIGO JAVA DE LA APLICACIN DE SMS. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.- BIBLIOGRAFIA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 5 8 8 9 10 18

1.- Comprobacin y compatibilidad de celular con hyperterminal. Lo primero que necesitamos antes que todo, es saber si nuestro celular puede utilizarse como modem, el modo de sms que acepta y dems, entonces es aqu donde entra el programa hyperterminal para comprobar todo eso. Para nuestro caso utilizamos un celular Marca MOTOROLA modelo EX116, adems se deben instalar los controladores correspondientes.

Abrimos el Hyperterminal con el celular conectado a la PC y elegimos cualquier icono y le ponemos un nombre a la prueba que aremos y pulsamos OK.

Elegimos un puerto a conectarnos al que se conectar el celular y tener comunicacin con la PC, en este caso como ya tenemos instalados los controladores del celular nos reconocer un puerto con un nombre y nos pedir el programa que anotemos un nmero de celular y damos OK, lo dems queda tal cual como se ve en la imagen de abajo.

En la siguiente ventana agregamos los comando para verificar que existe una conexin entre el celular y la computadora.

Deber aparecer OK, eso significa que se ha establecido una conexin, si es todo lo contrario como se muestra en la imagen siguiente entonces no se ha establecido ninguna conexin.

2.- Desarrollo de la aplicacin

Para desarrollar la aplicacin implementaremos una librera de comunicacin serial llamada RXTX, adems de los comandos AT que nos permitirn realizar operaciones con el celular. Desarrollaremos la aplicacin en java, as que para este manual se usara como compilador el programa Eclipse. Primero tenemos que descargar la librera RXTX, extraemos los archivos y copiamos el RXTXcomm.jar en la carpeta: C:\Program Files\Java\jdk1.6.0_04\jre\lib\ext, segn versin del jdk instalado, y en C:\Program Files\Java\jre6\lib\ext.

Despus, dentro de la carpeta extrada de la librera rxtx, en la carpeta \Windows\i368-mingw32, copiamos las dll que se muestran y las pegamos en C:\Program Files\Java\jdk1.6.0_04\jre\bin y en C:\Program Files\Java\jre6\bin.
5

Ahora pasamos a desarrollar la aplicacin, nuestra interfaz y dems mtodos que nos permitirn controlar el celular por medio de la librera RXTX y los comandos AT. Nuestra interfaz deber tener un men o pantalla principal donde seleccionar la opcin deseada, si queremos enviar los sms o ver los recibidos, en nuestro caso la interfaz inicial queda de la siguiente manera.
6

Enviar SMS

La interfaz principal de la ventana donde capturamos el sms a enviar es de la siguiente manera. En el primer cuadro de texto se coloca el nmero del celular al que le enviaremos el mensaje, y en el rea de texto siguiente nos permitir capturar el contenido del mensaje a enviar. Con el botn enviar, procederemos a realizar la operacin de envi y con el de regresar cancelamos la operacin y regresamos a la ventana principal.
Leer SMS

Para leer los mensajes recibidos en el celular, utilizamos una interfaz similar a la primera. En el primer cuadro se podr leer el nmero del que fue enviado el sms y en el rea de texto el contenido del mensaje. Primero tenemos que buscar y confirmar el puerto COM a utilizar y en el SO que utilicemos Windows en este caso, en el que debe de estar conectado nuestro celular. En este caso se configuro el puerto COM4.

3.- Funcionalidad de la aplicacin Bien pues hemos llegado a la parte ms esperada, probar la funcionalidad de nuestra aplicacin, aqu mostramos algunas capturas de toda las pruebas hechas con la aplicacin. 3.1.- Prueba para enviar SMS

Ejecutamos la aplicacin y en la interfaz principal elegimos Enviar SMS. En el primer cuadro escribimos el nmero de celular al cual enviamos el mensaje y en el segundo el texto a enviar, una vez hecho lo anterior pulsamos Enviar. Despus de pulsar el botn Enviar el programa nos lanzar una pequea ventana para confirmar el puerto que estamos utilizando para conectar la PC con el Celular, en nuestro caso utilizamos el puerto COM4, y pulsamos Aceptar para que se envi el SMS.

Como se muestra en las imgenes a continuacin el SMS se envi correctamente y llego al nmero de celular solicitado anteriormente.

3.2.- Prueba para leer SMS Para leer los SMS recibidos en el telfono solo hacemos en la interfaz inicial del programa pulsamos el botn recibir SMS y nos aparecer una ventana similar a la de enviar SMS. Solo pulsamos en bandeja de entrada en la nueva ventana y nos saldr una pequea ventana de confirmacin del puerto conectado a la PC y agregamos el puerto, en nuestro caso el puerto COM4 y pulsamos Aceptar.

Despus de pulsar Aceptar el programa empezar y leer el SMS almacenado en en la tarjeta SIM. Y como se aprecia en la imagen anterior el programa ha ledo un SMS almacenado en la tarjeta SIM del celular. Y con esto damos por terminado el manual para crear una aplicacin de envo y recepcin de SMS con JAVA.

4.- Cdigo Java de la aplicacin de SMS


IMPORT JAVAX.SWING.*; IMPORT JAVA.AWT.EVENT.*; IMPORT JAVA.IO.*; IMPORT GNU.IO.*; IMPORT JAVA.IO.INPUTSTREAM; IMPORT JAVA.IO.OUTPUTSTREAM; IMPORT JAVA.UTIL.ENUMERATION; IMPORT JAVA.UTIL.TOOMANYLISTENERSEXCEPTION; IMPORT JAVA.AWT.*; IMPORT JAVA.AWT.EVENT.*; IMPORT JAVAX.SWING.*; IMPORT JAVA.AWT.DIMENSION; IMPORT JAVA.AWT.GRAPHICS; IMPORT JAVAX.SWING.IMAGEICON; IMPORT JAVAX.SWING.JPANEL; IMPORT JAVA.AWT.BORDERLAYOUT; IMPORT JAVAX.SWING.JFRAME;

@SUPPRESSW ARNINGS("SERIAL") PUBLIC CLASS MENSAJE EXTENDS JFRAME { JSCROLLPANE PANELTEXTO, PANELPRINCIPAL; JLABEL LABELNUMERO, LABELMENSAJE, LABELSELECCION; JTEXTFIELD TEXTONUMERO; JTEXTAREA TEXTOMENSAJE; JBUTTON ENVIARMENSAJE, RECIBIRMENSAJE, ENVIAR, CANCELAR, BANDEJAENTRADA, PRINCIPAL; PRIVATE STRING AUX, TEXT1, NUMERO2, BANDEJA; PRIVATE INT LEG=-1;
PRIVATE COMMPORTIDENTIFIER PUERTOID; PRIVATE ENUMERATION LISTAPUERTOS; INPUTSTREAM ENTRADA; PRIVATE OUTPUTSTREAM SALIDA; SERIALPORT PUERTO; THREAD LEERTHREAD; PRIVATE STRING MENSAJE;

PUBLIC MENSAJE(){ SUPER ("MENSAJES"); SETSIZE(350,200); GETCONTENTPANE().SETBACKGROUND(NEW JAVA.AWT.COLOR(141,221,11)); SETLAYOUT(NULL); SETLOCATIONRELATIVETO(NULL); SETDEFAULTCLOSEOPERATION(JFRAME.EXIT_ON_CLOSE);

10

ENVIARMENSAJE = NEW JBUTTON("ENVIAR MENSAJE"); RECIBIRMENSAJE = NEW JBUTTON("RECIBIR MENSAJE"); CANCELAR = NEW

JBUTTON("SALIR");

LABELSELECCION = NEW JLABEL("SELECCIONE LA OPERACION DESEADA:"); PANELPRINCIPAL = NEW JSCROLLPANE(); ADD(ENVIARMENSAJE); ADD(RECIBIRMENSAJE); ADD(LABELSELECCION); ADD(CANCELAR); LABELSELECCION.SETBOUNDS(70, 20, 200, 15); ENVIARMENSAJE.SETBOUNDS(100,50,140,25); RECIBIRMENSAJE.SETBOUNDS(100,80,140,25); CANCELAR.SETBOUNDS(100,110,140,25);

ENVIARMENSAJE.ADDACTIONLISTENER(NEW

ACTIONLISTENER(){

PUBLIC VOID ACTIONPERFORMED(ACTIONEVENT E){ LABELSELECCION.SETVISIBLE(FALSE); ENVIARMENSAJE.SETVISIBLE(FALSE); RECIBIRMENSAJE.SETVISIBLE(FALSE); CANCELAR.SETVISIBLE(FALSE);

ENVIARMENSAJE(); } });
RECIBIRMENSAJE.ADDACTIONLISTENER(NEW

ACTIONLISTENER(){

PUBLIC VOID ACTIONPERFORMED(ACTIONEVENT E){ LABELSELECCION.SETVISIBLE(FALSE); ENVIARMENSAJE.SETVISIBLE(FALSE); RECIBIRMENSAJE.SETVISIBLE(FALSE); CANCELAR.SETVISIBLE(FALSE);

RECIBIRMENSAJE(); } });
CANCELAR.ADDACTIONLISTENER(NEW CERRAR();

ACTIONLISTENER(){

PUBLIC VOID ACTIONPERFORMED(ACTIONEVENT E){

SYSTEM.EXIT(0); } });
SETRESIZABLE(TRUE); SETVISIBLE(TRUE);

}
PUBLIC VOID VERIFICAR(){ BOOLEAN PUERTOENCONTRADO = FALSE; STRING PUERTODEFAULT;

11

STRING OSNOMBRE = SYSTEM.GETPROPERTY("OS.NAME","").TOLOWERCASE(); IF(OSNOMBRE.STARTSW ITH("WINDOWS")){ PUERTODEFAULT = JOPTIONPANE.SHOWINPUTDIALOG("INGRESA EL PUERTO: (EJEMPLO COM10)"); }ELSE{ SYSTEM.OUT.PRINTLN("ERROR SISTEMA NO COMPATIBLE"); RETURN; } SYSTEM.OUT.PRINTLN("CONFIGURAR EL PUERTO POR DEFECTO A "+PUERTODEFAULT); LISTAPUERTOS = COMMPORTIDENTIFIER.GETPORTIDENTIFIERS(); WHILE (LISTAPUERTOS.HASMOREELEMENTS()) { PUERTOID = (COMMPORTIDENTIFIER) LISTAPUERTOS.NEXTELEMENT(); IF (PUERTOID.GETPORTTYPE() == COMMPORTIDENTIFIER.PORT_SERIAL) { IF (PUERTOID.GETNAME().EQUALS(PUERTODEFAULT)) { SYSTEM.OUT.PRINTLN("PUERTO ENCONTRADO: "+PUERTODEFAULT); PUERTOENCONTRADO = TRUE; INICIALIZAR(); } } } IF (!PUERTOENCONTRADO) { JOPTIONPANE.SHOWMESSAGEDIALOG(THIS, "PUERTO NO ENCONTRADO"); } }
PUBLIC VOID ENVIARMENSAJE(){ SETTITLE("ENVO DE SMS"); SETSIZE(350,200); GETCONTENTPANE().SETBACKGROUND(NEW JAVA.AWT.COLOR(0,128,255)); SETLAYOUT(NULL); SETLOCATIONRELATIVETO(NULL); SETDEFAULTCLOSEOPERATION(JFRAME.EXIT_ON_CLOSE); LABELNUMERO = NEW JLABEL("NMERO:"); LABELMENSAJE = NEW JLABEL("MENSAJE:"); TEXTONUMERO = NEW JTEXTFIELD(); TEXTOMENSAJE = NEW JTEXTAREA(); ENVIAR = NEW JBUTTON("ENVIAR"); PRINCIPAL = NEW JBUTTON("REGRESAR"); PANELTEXTO = NEW

JSCROLLPANE(); ADD(LABELNUMERO); ADD(LABELMENSAJE); ADD(TEXTONUMERO); ADD(TEXTOMENSAJE); ADD(ENVIAR); ADD(PRINCIPAL); ADD(PANELTEXTO); PANELTEXTO.SETVIEWPORTVIEW(TEXTOMENSAJE); LABELNUMERO.SETBOUNDS(10,10,50,25);

12

TEXTONUMERO.SETBOUNDS(70,10,125,25); LABELMENSAJE.SETBOUNDS(10,50,60,25); PANELTEXTO.SETBOUNDS(70,50,125,100); ENVIAR.SETBOUNDS(220,30,100,25); PRINCIPAL.SETBOUNDS(220, 60, 100, 25); ENVIAR.ADDACTIONLISTENER(NEW

ACTIONLISTENER(){ PUBLIC VOID ACTIONPERFORMED(ACTIONEVENT E){ VERIFICAR(); INICIAESCRIBIRPUERTO(); ESCRIBIRENPUERTO(); }

});
PRINCIPAL.ADDACTIONLISTENER(NEW

ACTIONLISTENER(){

PUBLIC VOID ACTIONPERFORMED(ACTIONEVENT E){ MENSAJE.THIS.SETVISIBLE(FALSE); NEW MENSAJE();

} });
SETRESIZABLE(FALSE); SETVISIBLE(TRUE);

}
PUBLIC VOID RECIBIRMENSAJE(){ SETTITLE("RECEPCIN DE SMS"); SETSIZE(350,200); GETCONTENTPANE().SETBACKGROUND(NEW JAVA.AWT.COLOR(128,0,255)); SETLAYOUT(NULL); SETLOCATIONRELATIVETO(NULL); SETDEFAULTCLOSEOPERATION(JFRAME.EXIT_ON_CLOSE); LABELNUMERO = NEW JLABEL("NUMERO:"); LABELMENSAJE = NEW JLABEL("MENSAJE:"); TEXTONUMERO = NEW JTEXTFIELD(); TEXTOMENSAJE = NEW JTEXTAREA(); BANDEJAENTRADA = NEW JBUTTON("BANDEJA DE ENTRADA"); PRINCIPAL = NEW JBUTTON("REGRESAR"); PANELTEXTO = NEW

JSCROLLPANE();

ADD(LABELNUMERO); ADD(LABELMENSAJE); ADD(TEXTONUMERO); ADD(TEXTOMENSAJE); ADD(BANDEJAENTRADA); ADD(PRINCIPAL); ADD(PANELTEXTO); PANELTEXTO.SETVIEWPORTVIEW(TEXTOMENSAJE); LABELNUMERO.SETBOUNDS(10,10,50,25); TEXTONUMERO.SETBOUNDS(70,10,125,25);

13

LABELMENSAJE.SETBOUNDS(10,50,60,25); PANELTEXTO.SETBOUNDS(70,50,125,100); BANDEJAENTRADA.SETBOUNDS(220,30,100,25); PRINCIPAL.SETBOUNDS(220, 60, 100, 25); BANDEJAENTRADA.ADDACTIONLISTENER(NEW VERIFICAR(); LEERENPUERTO();

ACTIONLISTENER(){

PUBLIC VOID ACTIONPERFORMED(ACTIONEVENT E){

} });
PRINCIPAL.ADDACTIONLISTENER(NEW

ACTIONLISTENER(){

PUBLIC VOID ACTIONPERFORMED(ACTIONEVENT E){ MENSAJE.THIS.SETVISIBLE(FALSE); NEW MENSAJE();

} });
SETRESIZABLE(FALSE); SETVISIBLE(TRUE);

}
PRIVATE VOID INICIALIZAR(){ TRY {

= (SERIALPORT) PUERTOID.OPEN("SIMPLEREADAPP", 2000); } CATCH (PORTINUSEEXCEPTION E) {}


PUERTO TRY { ENTRADA = PUERTO.GETINPUTSTREAM();

} CATCH (IOEXCEPTION E) {} TRY{ PUERTO.ADDEVENTLISTENER(NEW SERIALPORTEVENTLISTENER(){ @OVERRIDE PUBLIC VOID SERIALEVENT(SERIALPORTEVENT EVENT){ SWITCH (EVENT.GETEVENTTYPE()){ CASE SERIALPORTEVENT.BI: CASE SERIALPORTEVENT.OE: CASE SERIALPORTEVENT.FE: CASE SERIALPORTEVENT.PE: CASE SERIALPORTEVENT.CD: CASE SERIALPORTEVENT.CTS: CASE SERIALPORTEVENT.DSR: CASE SERIALPORTEVENT.RI: CASE SERIALPORTEVENT.OUTPUT_BUFFER_EMPTY: BREAK; CASE SERIALPORTEVENT.DATA_AVAILABLE: BYTE[] READBUFFER=NEW BYTE[20];

14

TRY{ WHILE(TRUE){ IF((LEG=ENTRADA.READ(READBUFFER))>-1) TEXT1=NEW

STRING(READBUFFER,0,LEG);
AUX=AUX+TEXT1; INT K=AUX.INDEXOF(", "); NUMERO2=AUX.SUBSTRING(104,K-1); TEXTONUMERO.SETTEXT(NUMERO2); K=AUX.INDEXOF(",0,"); BANDEJA=AUX.SUBSTRING(115,K); TEXTOMENSAJE.SETTEXT(BANDEJA);

} }CATCH (IOEXCEPTION E){} BREAK; } }

}); }CATCH (TOOMANYLISTENERSEXCEPTION E){} PUERTO.NOTIFYONDATAAVAILABLE(TRUE); TRY { PUERTO.SETSERIALPORTPARAMS(9600, SERIALPORT.DATABITS_8, SERIALPORT.STOPBITS_1, SERIALPORT.PARITY_NONE); } CATCH (UNSUPPORTEDCOMMOPERATIONEXCEPTION E) {} INICIAESCRIBIRPUERTO(); }
PUBLIC VOID ESCRIBIRENPUERTO(){

SYSTEM.OUT.PRINTLN("ESCRIBIENDO \""+MENSAJE+"\" A "+PUERTO.GETNAME()); TRY { SALIDA.WRITE('A'); SALIDA.WRITE('T'); SALIDA.WRITE('+'); SALIDA.WRITE('C'); SALIDA.WRITE('M'); SALIDA.WRITE('G'); SALIDA.WRITE('F'); SALIDA.WRITE('='); SALIDA.WRITE('1'); SALIDA.WRITE('\R');
MENSAJE = "AT+CMGS=\""+TEXTONUMERO.GETTEXT()+"\"\R";

15

SALIDA.WRITE(MENSAJE.GETBYTES()); TRY {

THREAD.SLEEP(2000); } CATCH (INTERRUPTEDEXCEPTION E) {}


MENSAJE = TEXTOMENSAJE.GETTEXT()+"\032"; SALIDA.WRITE(MENSAJE.GETBYTES()); SALIDA.FLUSH();

JOPTIONPANE.SHOWMESSAGEDIALOG(THIS, "MENSAJE ENVIADO"); }CATCH (IOEXCEPTION E) {} }


PUBLIC VOID LEERENPUERTO(){ TRY { MENSAJE = "AT+CMGF=1\R"; SALIDA.WRITE(MENSAJE.GETBYTES()); SALIDA.FLUSH(); TRY{ THREAD.SLEEP(2000); }CATCH (INTERRUPTEDEXCEPTION E){} MENSAJE = "AT+CPMS=\"SM\"\R"; SALIDA.WRITE(MENSAJE.GETBYTES()); SALIDA.FLUSH(); TRY{ THREAD.SLEEP(2000); }CATCH (INTERRUPTEDEXCEPTION E){} MENSAJE = "AT+CMGR=1\R"; SALIDA.WRITE(MENSAJE.GETBYTES()); SALIDA.FLUSH();

JOPTIONPANE.SHOWMESSAGEDIALOG(THIS, "MENSAJE LEIDO"); }CATCH (IOEXCEPTION E) {} SYSTEM.OUT.PRINTLN("LEYENDO \""+MENSAJE+"\" EN EL PUERTO "+PUERTO.GETNAME()); }


PUBLIC VOID INICIAESCRIBIRPUERTO() { TRY { SALIDA = PUERTO.GETOUTPUTSTREAM();

} CATCH (IOEXCEPTION E) {}
TRY { PUERTO.NOTIFYONOUTPUTEMPTY(TRUE);

} CATCH (EXCEPTION E) { SYSTEM.OUT.PRINTLN("ERROR"); SYSTEM.OUT.PRINTLN(E.TOSTRING()); SYSTEM.EXIT(-1); }

16

}
PUBLIC VOID CERRAR(){ TRY{ SALIDA.CLOSE(); PUERTO.CLOSE();

}CATCH(EXCEPTION E){} }
PUBLIC VOID REINICIARCAMPOS(){ TEXTONUMERO.SETTEXT(""); TEXTOMENSAJE.SETTEXT("");

}
PUBLIC STATIC VOID MAIN (STRING[] ARGS){ NEW MENSAJE();

} }

17

5.- Bibliografia 1. http://www.techweb.com/tech/mobile/ 2. http://www.xiam.com/news/business-gets-the-message/ 3. http://www.iec.org/online/tutorials/wire_sms/ 4. http://opensmpp.logica.com 5. http://www.kannel.org 6. http://www.simplewire.com 7. http://www.keynote.com/news_events/releases_2002/02sept16.html

18

You might also like