SMSGateway basado en aplicación J2ME

gsantinimx
Posts: 44
Joined: 2009-02-09

Como les comenté, subiré algo de código para demostrar el funcionamiento
del API que desarrollé para simplificar el envío de mensajes MMS y SMS en J2ME.

En esta ocasión, he desarrollado una pequeña aplicación java instalable en handsets iden que tienen capacidades CLDC 1.1 / MIDP2.0 y la JSR 205, la cual funciona como un SMSGateway basado en un handset.

El funcionamiento de la aplicación es sencillo, la aplicación java abre una conexión de puerto serial, usando una conexión usb entre el handset y la pc. A través de este puerto serial virtual la pc transmite al handset el mensaje que se desea enviar, usando el siguiente formato:

{{ptn destino}}|{{mensaje}}

por ejemplo:

525500000000|mensaje de prueba

para realizar el envío de los mensajes de la pc al handset solo se requiere tener instalado el driver usb de motorola (el cual pueden descargar en el sitio de motodev.com)así como algún programa de emulación de terminal como el Hyperterminal (o cualquier otro softweare que permita abrir una conexión por puerto serial). La conexión serial se debe establecer a 115200 bps.

Al recibir la trama de mensaje antes descrita, la aplicación java separa el mensaje y el número destino (ptn destino), y dependiendo del aprovisionamiento del equipo, lo envía ya sea por MMS o por SMS

A continuación muestro el código de la clase que implementa la rececpción de los mensajes por el puerto serial y su envío por SMS o MMS según sea el caso:

/*
 * CommPortMessagingEngine.java
 * 2 de Septiembre de 2009
 */

package gs.embtel.netsms.iden.engine;

import java.io.*;
import gs.mobile.messaging.*;
import javax.microedition.io.*;
import javax.microedition.lcdui.*;
import javax.wireless.messaging.*;

/**
 * Clase que implementa el motor de mensajería vía puerto serial
 * @author Ing.Giancarlo Santini
 * @version 1.0
 */

public class CommPortMessagingEngine implements Runnable{
   
    private Form console;
    private Thread thread;
    private boolean execute;   
    private CommConnection port;
    private DataInputStream input;
    private DataOutputStream output;
   
    public CommPortMessagingEngine(CommConnection port , Form console){
        input = null;
        output = null;
        thread = null;       
        this.port = port;
        this.console = console;
        execute = false;
    }
   
    public void start(){
        execute = true;
       
        try{
            input = port.openDataInputStream();
            output = port.openDataOutputStream();
            thread = new Thread(this);
            thread.start();
        } catch(Exception ex){
            console.append("Cannot start Messaging engine because of Exception: " +
                    ex.getMessage() + "\n");
        }
    }
   
    public void stop(){
        execute = false;
       
        try{
            input.close();
            output.close();
        } catch(Exception ex){
            console.append("Error while closing input/output buffers. Exception: " +
                    ex.getMessage() + "\n");
        } finally{
            input = null;
            output = null;
        }
       
        thread.interrupt();
    }
   
    public void run() {
        console.append("Starting Messaging engine..\n");
       
        while(execute){
            int data = 0;
            StringBuffer sb = new StringBuffer("");
           
            try{
                while((data = input.read()) != '\r'){
                    sb.append((char)data);
                }
               
                if(sb.toString().indexOf("|") > -1){
                    String ptn = sb.toString().substring(0, sb.toString().indexOf("|"));
                    String message = sb.toString().substring(sb.toString().indexOf("|") + 1);
                   
                    console.deleteAll();
                    console.append("Sending message to PTN: " + ptn + " - Message:" + message + "\n");
                   
                    console.append("Sending Message...\n");
                   
                    SmsInfo smsBody = new SmsInfo();
                    smsBody.setAddress(ptn.trim());
                    smsBody.setMessage(message.trim());
                   
                    SmsSender sms = new SmsSender(smsBody);
                   
                    MessageConnection smsConn = (MessageConnection)Connector.open("sms://" + smsBody.getAddress());
                   
                    sms.setConnection(smsConn);
                    sms.start();
                   
                    while(sms.isSending());
                   
                    if(sms.getResultCode() == 1){
                        console.append("Message Sent Successfully!\n");
                        output.writeUTF("OK");
                    }
                   
                    else{
                        MmsInfo mmsBody = new MmsInfo();
                        mmsBody.setAddress(ptn.trim());
                        mmsBody.setSubject("Santini Embtel NetSMS MMS");
                        mmsBody.setTextMsg(message);
                       
                        MmsSender mms = new MmsSender(mmsBody);
                       
                        MessageConnection mmsConn = (MessageConnection)Connector.open("mms://" + mmsBody.getAddress());
                       
                        mms.setConnection(mmsConn);
                        mms.start();
                       
                        while(mms.isSending());
                       
                        if(mms.getResultCode() == 1){
                            console.append("Message Sent Successfully!\n");
                            output.writeUTF("OK");
                        }
                       
                        else{
                            console.append("Error while sending message!!\n");
                            output.writeUTF("ERROR");
                        }
                       
                        mmsConn.close();
                        mmsConn = null;
                       
                        mmsBody = null;
                        mms = null;
                    }
                   
                    smsConn.close();
                    smsConn = null;
                   
                    smsBody = null;
                    sms = null;
                }
               
                sb = null;
            } catch(Exception ex){
                console.append("Error while reading port. Exception: " +
                        ex.getMessage() + "\n");
            }
        }
    }

}

Adjunto a este post el .jar y .jad para que puedan instalar la aplicación en su handset.

Saludos

AnexoTamanho
smsgetaway.zip91.49 KBEntrar


Opções de exibição de comentários

Escolha sua maneira preferida de exibir os comentários e clique em "Salvar ajustes" para ativar suas mudanças.
gsantinimx
Posts: 44
Joined: 2009-02-09
SMSGateway J2ME

Estta pequeña aplicación la he probado en el i876,i776,i576

Espero les sea de utilidad

Saludos



dario200
Posts: 3
Joined: 2009-10-20
No me funciona en un i760

Hola, lo instalé en un Motorola i760. Puedo inicialo, aparece la imagen de la computadora, puedo ver el menú de START y STOP y el "About". Pero cuando selecciono START me aparece una leyenda "Starting Service" con una imagen en el fondo de un reloj de arena. Así se queda de por vida y por el Hyperterminal en 115200 bps me sigue devolviendo OK a los comandos AT, como si la aplicación no "tomara" el puerto del teléfono.
¿Hay algo que pueda hacer o deba configurar en el handset? Gracias.



dario200
Posts: 3
Joined: 2009-10-20
No me funciona en un i760

Hola, lo instalé en un Motorola i760. Puedo inicialo, aparece la imagen de la computadora, puedo ver el menú de START y STOP y el "About". Pero cuando selecciono START me aparece una leyenda "Starting Service" con una imagen en el fondo de un reloj de arena. Así se queda de por vida y por el Hyperterminal en 115200 bps me sigue devolviendo OK a los comandos AT, como si la aplicación no "tomara" el puerto del teléfono.
¿Hay algo que pueda hacer o deba configurar en el handset? Gracias.



gsantinimx
Posts: 44
Joined: 2009-02-09
RE: iDEN Handset based SMSGateway - No me funciona en un i760

Hola Dario,

Primero antes de conectar el handset a tu pc e iniciar la aplicación debes instalar los drivers para teléfonos motorola, los cuales puedes descargar de la ssiguiente dirección:

http://developer.motorola.com/docstools/USB_Drivers/

Una vez instalados los drivers al conectar tu handset a tu pc, se registrará un nuevo puerto COM (puerto serial), este nuevo puerto es el que deberás usar para comunicarte con el telefono vía hyperterminal.

Para probar que esto este funcionando, a través del hyperterminal puedes enviar el comando "at" y el handset te deberá responder "OK", todo esto SIN INICIAR LA APLICACIÓN JAVA. Una vez que hayas obtneido una respuesta correcta (OK), cierra tu conexión en el hyperterminal, reiniciala, e inicia la aplicación JAVA presiona Start y listo.



gsantinimx
Posts: 44
Joined: 2009-02-09
RE: iDEN Handset based SMSGateway - No me funciona en un i760

El mensaje con el reloj de arena "Starting services", es el mensaje que despliega cuando la aplicación java está abriendo el puerto serial a utilizar para comunicarse con la PC, para que este proceso sea exitoso el teléfono debe tener configurada su conexión USB como Modem de Datos (Data MODEM)



dario200
Posts: 3
Joined: 2009-10-20
Primero gracias por

Primero gracias por responder. Te comento que la última versión del driver está instalada y corriendo correctamente. Tengo comunicación con el teléfono utilizando el hyperterminal en 115200 bps sin problemas, responde a los comandos AT. He intentado cerrar la conexión del terminal e iniciar la aplicación java, pero sigue con el mismo problema, es decir, queda en "Starting Service". Por otra parte, no encontré en ningún menú del teléfono la opción de "Conexión USB" o nada parecido.
Lo máximo que vi relacionado con el puerto es "Configurar / Avanzado / Vel Baud" y está seteado en 115200.

Los datos de la versión de firmware del equipo son:
Versión de SW: R3E.01.01 / Tipo de SW: MS-PDGY-BER-DEER_KEY-R13 / Fecha SW: Tue Jul 11 10:26:14 EST 2006

¿Será que es una versión vieja de firmware y tendré que buscar cómo hacer un upgrade del mismo?. Saludos y gracias.



jeferson.passos
Posts: 1
Joined: 2009-09-17
O Nokia não abre o SMS

Testei essa aplicação em meu i876.
Mas estou tendo um problema:
- Quando a mensagem é enviada a um Nokia, o Nokia não consegue abrí-la(modelo E71 por exemplo).
Mas se uso a aplicação do kernel do i876 para enviar sms ao mesmo Nokia, a mensagem é aberta sem problema.

Voce poderia ajudar-me ??

obrigado

Jeferson Passos



jfrincon
Posts: 449
Joined: 2006-12-01
MMS Encoding

Oi Jeferson,

Tudo bem?

Eu já vi esse problema. Tem que ver com a codificação da mensagem -- tem vezes que alguns mensagens enviados por Java e MMS não chegam aos aparelhos de outros operadores.

O truque é enviar somente SMS e se assegurar que esteja usando basicamente somente o alfabeto ASCII

[]s

Juan Felipe



BrunoNV
Posts: 1
Joined: 2009-09-26
Olá Juan, Você sabe se

Olá Juan,

Você sabe se funciona no i290 ou i335?

Abraços!



jfrincon
Posts: 449
Joined: 2006-12-01
MMS Encoding

Acredito que deve fundioncar no i290 e i335 -- os dois são aparelhos de MMS/SMS.

Juan Felipe



marcelofernandes
Posts: 1
Joined: 2009-10-06
Envio em Lotes

Olá pessoal, esse programa consegue enviar mensagens em lotes em pouco espaço de tempo?

Baixei a aplicação e via emulador eu consigo, mas não sei se a engine do celular suporte o envio de SMS em lotes.

No aguardo se alguem souber da informação

Marcelo Fernandes



jfrincon
Posts: 449
Joined: 2006-12-01
re: Envio em lotes

Oi Marcelo

SMS se faz um por um.
MMS pode enviar em lotes, adicionando receitores com addAddress()

[]s

Juan Felipe



Dj Heros
Posts: 3
Joined: 2009-08-19
Preciso desse programa rodando com meu i290

Preciso desse programa rodando no meu i290, para disparar lote de sms, mesmo sendo 1por1. Alguem pode adaptar o mesmo para isso.
Pago por isso.

Obrigado Heros

djheros@gmail.com



gsantinimx
Posts: 44
Joined: 2009-02-09
RE: Preciso desse programa rodando com meu i290

Hi Dj Heros,

My name is Giancarlo Santini, from Mexico City.

I have developed the iDEN based SMSGateway and I can help you with your new requirement

Regards

Skype: ing.giancarlosantini



gianrubio
Posts: 1
Joined: 2010-02-18
no funciona com i876w

Com el i876w no funciono.
El hyperterminal se conecta, envia comandos at com resposta OK, mais quando vou iniciar o netsms4iden ele exibe o erro "failed to start services"

Alguma sugestao?



gsantinimx
Posts: 44
Joined: 2009-02-09
RE: no funciona com i876w

Hola Gian,

Ya que te he enviado la nueva version de la aplicación y al hacer pruebas, como te explique y pudiste comprobar, el error se debia al uso del puerto incorrecto



gsantinimx
Posts: 44
Joined: 2009-02-09
RE

Hola Nostradamus,

Creo que no he comprendido del todo Tu Comentario. Podrias aclararme a lo que te refieres??

Si te refieres al problema que reporta Giancarlo Rubio sobre una aplicación que le proporcioné, este problema no se refería a un puerto usado en la aplicación J2ME que se carga en el handset, si no al puerto serial que elijió en la aplicación de PC que interactua con el handset

Saludos