Código J2ME para enviar um SMS

23 julho 2009
Olá! Mais um dos códigos fornecidos no forum da Nokia e testado pelo JavaMovel!
Este permite enviar um SMS para o número desejado. Pode ser útil para alguma aplicação. Além de ser muito interessante descobrir como fazer estas coisas.

A primeira parte só cria o form que vai ser utilizado para receber o número e o texto da mensagem. Os demais métodos são operações para o envio da mensagem. O código é simples e não é complicado de entender. Qualquer coisa é só deixar um comentário!

import java.io.IOException;
import java.io.InterruptedIOException;
import javax.microedition.io.Connector;
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Form;
import javax.microedition.lcdui.TextField;
import javax.microedition.midlet.MIDlet;
import javax.wireless.messaging.MessageConnection;
import javax.wireless.messaging.TextMessage;

public class SMSMIDlet extends MIDlet implements CommandListener {
private Command enviar;
private Command sair;
private Form form;
private TextField tfNumero;
private TextField tfTexto;
private MessageConnection connection;

public SMSMIDlet() {
//"desenha" o form, inserindo seus componentes
form = new Form("Examplo de envio de SMS");

tfNumero = new TextField("Numero:", null, 20,
TextField.PHONENUMBER);
form.append(tfNumero);

tfTexto = new TextField("Texto:", null, 160, TextField.PLAIN);
form.append(tfTexto);

enviar = new Command("Enviar", Command.ITEM, 0);
form.addCommand(enviar);

sair = new Command("Sair", Command.EXIT, 0);
form.addCommand(sair);

form.setCommandListener(this);
}

public void startApp() {
Display.getDisplay(this).setCurrent(form);
}

public void pauseApp() {
}

public void destroyApp(boolean unconditional) {
if (connection != null) {
try {
connection.close();
} catch (IOException ex) {
}
}
}

public void commandAction(Command command, Displayable displayable) {
if (command == sair) {
destroyApp(true);
notifyDestroyed();
} else if (command == enviar) {
enviarMensagem();
}
}

private void enviarMensagem() {
try {
connection = (MessageConnection)Connector.open("sms://:5000");
} catch (IOException ex) {
}

TextMessage mensagem = prepararSMS();
enviarSMS(mensagem);
}

private TextMessage prepararSMS() {
TextMessage mensagem = (TextMessage)connection.newMessage(
MessageConnection.TEXT_MESSAGE);

String number = "sms://" + tfNumero.getString();
mensagem.setAddress(number);

String texto = tfTexto.getString();
mensagem.setPayloadText(texto);

return mensagem;
}

private void enviarSMS(final TextMessage message) {
Thread smsThread = new Thread() {
public void run() {
try {
connection.send(message);
form.append("Mensagem enviada");
} catch (InterruptedIOException ex) {
} catch (IOException ex) {
} catch (IllegalArgumentException ex) {
} catch (SecurityException ex) {
}
}
};
smsThread.start();
}
}

14 comentários:

  • Olá, estou desenvolvendo uma aplicação e utilizei este código fonte para exemplo.

    Estou com o seguinte problema: em celulares nokia as mensagens enviadas com esta aplicação não abrem, aparece um erro dizendo que é impossível abrir a mensagem pois o formato é inválido, apenas ficando visível em miniatura na caixa de entrada, porém em celulares sony ericsson e gradiente as mensagens abrem normalmente.

    Alguém tem idéia do que pode estar acontecendo?

    Obrigado!

  • javamovel.com

    Olá Thiago! Sinceramente não sei o porque, mas vamos procurar saber. Testamos em um Nokia 5320 e funcionou perfeitamente.

    Assim que tiver novidades sobre o problema comento aqui novamente.

  • Olá, fiz mais alguns testes e percebi que o problema está acontecendo apenas quando utilizo a aplicação em um motorola i290 e também percebi que o problema ocorre apenas quando a mensagem é enviada pela aplicação j2me, quando é enviada normal, sem ser pela aplicação a mensagem chega e abre normalmente nos celulares Nokia.

    Já pesquisei bastante tentando achar uma solução mas ainda não consegui, se alguém conseguir me ajudar ficarei muito grato.

    Obrigado!

  • O problema acima foi resolvido usando MessagePart para enviar as SMS caso alguém venha a ter o mesmo problema. ;)

  • javamovel.com

    Obrigado pela orientação Thiago! ;)

  • Victor Hugo

    Para um inexperiente como eu, em JavaMovel esse codigo so deu copiar e colar ja vai "funcinar" no meu NetBeans???
    Sei que pra jogar pro celular tem que gerar o Jar.

  • javamovel.com

    Victor Hugo, basta criar uma midlet e colar este código. Quando fazer a compilação a IDE criará o arquivo .jar para ser colocado no celular.
    Lembre-se que para enviar mensagens SMS você precisa dos serviços da operadora, portando não é possível enviar mensagens através do emulador.

  • Bruno Diego

    Tenho um motocubo e testei o aplicativo enviando mensagem para eu próprio, pode ser loucura hehehe. Não chegou nenhuma mensagem. Eu preciso alterar alguma coisa no código para q as mensagens sejam enviadas pela minha operadora, TIM, sem problemas?

  • javamovel.com

    Bruno, nós testamos em um aparelho nokia 5220 com a operadora TIM e funcionou sem problemas. Fica complicado descobrir o porque não funcionou no seu aparelho. Dê uma testada em outros códigos por ai e faça uma comparação. Boa sorte..

  • raaphaeell

    Bom dia a todos, estou começando em J2ME e estou com algumas dúvidas sobre esse script.
    1 - É necessario estar conectado a internet para poder enviar o sms?
    2 - Qual o formato que tem que colocar o numero para envio(081-9999-9999)?

  • raaphaeell

    Pessoal, já consegui resolver. O cel estava sem crédito.
    :D

  • Eu estou com o mesmo problema para envio de sms's, As mensagem não são abertas no meu Sony X1, que roda WM6. Como posso resolver utilizando MessagePart ?

  • Gostaria de retirar os avisos de seguraça é possível?

  • esse programa roda de JavaSE para ME ? ou é de ME para ME ?

  • Postar um comentário