viernes, 11 de noviembre de 2011

Envío de SMS con J2Me

1 - Iniciar el Netbeans, este proyecto fue desarrollado con la version 7.0.1 en ingles.
2 - Crear el proyecto en netbeans, Menu File -> New Proyect
En el cuadro de diálogo seleccionar Categoría: JavaME, Proyecto: Mobile Application; click en Next.



3-Dar un nombre al proyecto, yo seleccioné BlasSMS


4 - En la siguiente pantalla es necesario seleccionar la plataforma para la que se compilará el proyecto, para esta ocasion CLDC-1.0 y MIDP-2.0, se seleccionan las configuraciones mas básicas posibles para mantener la compatibilidad con la mayor cantidad de dispositivos posibles.
Luego hacemos click en Finish


5 - Seleccionamos el archivo HelloMIDlet.java, apretamos F2 y cambiamos su nombre a BlasSMS.java y le damos enter, en la pantalla que aparece seleccionamos la casilla "Apply Rename on Comments" (Aplicar renombrar a los comentarios) y hacemos click en Refactor.

6 - Abrir el fuente BlasSMS.java y hacer click en boton Screen y seleccionar "form" en el combo de la derecha.

7 - En la paleta de objetos seleccionamos TextField y agregamos 2 campos al form que estamos editando, seleccionamos el primero de los textfields, hacemos click derecho y seleccionamos Rename, cambiamos el nombre de la instancia a "txtCodigo".



Hacemos lo mismo con el segundo textfield y lo nombramos "txtMensaje".

Al hacer click derecho sobre los objetos podemos acceder también a las propiedades, y cambiar los labels a "Codigo" y "Mensaje"


Ahora seleccionamos en la paleta un "Exit Command" y lo agregamos a la pantalla, luego un "Ok Command", también lo agregamos, cambiamos las propiedades para que se llamen "cmdSalir" y "cmdEnviar" de manera análoga a las propiedades de los campos de texto.



El proyecto debería verse así:


8 - En la solapa "Flow", se hace un click en el boton cmdSalir y se arrastra hacia el cuadro titulado "Mobile Device"
Con lo que se vería así:


9 - Al código!
Seleccionamos la solapa source, debajo de la declaracion de la clase agregamos la declaracion de dos variables, una para el mensaje y otra para mantener el numero telefónico al cual enviar
public class BlasSMS extends MIDlet implements CommandListener {
private String mensaje = "";
private String telNro = "+595985265999";
en el método commandAcction agregamos una llamada al metodo enviarSMS() que efectuará el envio del mensaje

public void commandAction (Command command, Displayable displayable) {
if (displayable == form) {
if (command == cmdEnviar) {
// write pre-action user code here
this.enviarSMS(this.telNro); //----> ATENCION ESTE ES EL CODIGO AGREGADO!!!
// write post-action user code here
} else if (command == cmdSalir) {
Al final del archivo se escriben métodos para enviar y validar el mensaje, uno para dar un formato "util" al texto enviado y otro para mostrar una ventana de alerta que nos ayudará a mostrar diferentes mensajes en pantalla.
Validación del mensaje:
public boolean validarMensaje(){

if (this.txtCodigo.getString().length()<1){
this.mensaje = "Falta Codigo: Verifique";
return false;
}
if (this.txtMensaje.getString().length()<1){

this.mensaje = "Falta Mensaje: Verifique";
return false;
}

return true;

}
Método para "comprimir" el mensaje con los datos introducidos antes de enviarlo:
public String compactarMensaje(){

String resultado = "" ;
resultado = "'" + this.txtCodigo.getString().trim().toUpperCase() + "',";
resultado += "'" + this.txtMensaje.getString().trim().toUpperCase() + "',";
return resultado;
}

Método para envío del mensaje:
public boolean enviarSMS(String telNro){
try {
if (!validarMensaje()){
mostrarAlerta(this.mensaje);
return false;
}
String recipientAddress = "sms://" + telNro;
MessageConnection connection = (MessageConnection) Connector.open(recipientAddress);
TextMessage tmsg = (TextMessage) connection.newMessage(MessageConnection.TEXT_MESSAGE);
tmsg.setPayloadText(this.compactarMensaje());
tmsg.setAddress(recipientAddress);
connection.send(tmsg);
connection.close();
} catch (IOException ex) {
this.mostrarAlerta("Error:" + ex.getMessage());
return false;
}
this.mostrarAlerta("Envio OK");
return true;
}
Método para mostrar alertas:
public void mostrarAlerta(String msg){
Alert frmAlert = new Alert(msg);
frmAlert.setTimeout (Alert.FOREVER);
switchDisplayable (frmAlert, getForm());
}
Bibliografía:

Proyecto tagua http://sourceforge.net/projects/tagua/files/ Octubre 10, 2011
Manual de programación J2ME http://mygnet.net/manuales/j2me/manual_programacion_j2me.510 Octubre 10, 2011
Arranque rápido para programar J2ME http://netbeans.org/kb/docs/javame/quickstart.html Octubre 10, 2011

2 comentarios:

  1. Hola Blas que tal? tengo un error en esta linea de codigo this.enviarSMS(); //----> ATENCION ESTE ES EL CODIGO AGREGADO!!! me dice que no puedo aplicar ese metodo creo que es porque esta definido asi public boolean enviarSMS(String telNro), tiene que recibir un String y ahi no le envio ningun parametro o.O o estoy equivocado?

    ResponderEliminar
  2. Cierto, la linea debe ser this.enviarSMS(this.telNro); Gracias.

    ResponderEliminar