Emitindo SMS com o PushRegistry e a JSR 120

Todos os telefones móveis que possuem o MIDP (Mobile Information Device Profile) 2.0 executam a funcionalidade de PushRegistry, que deixa o telefone automaticamente iniciar uma aplicação em resposta a uma conexão remota.
Além, o suporte a JSR-120 (WMA-SMS) torna possível escrever MIDlets que emitem e recebem mensagens de SMS. Trabalhando juntos, este duo dinâmico gera uma área nova com diversas possibilidades interessantes onde SMS recebidos iniciam automaticamente um MIDlet.
Para mostrar os passos básicas do desenvolvimento para SMS e o PushRegistry, devemos considerar dois MIDlets (ex. PingPong) um de envio do SMS e outro que é iniciado automaticamente quando um SMS é recebido. Quando iniciado, este simplesmente exibe a mensagem contida no SMS.
Dependendo da maneira que o AMS (Application Management Software) é executado, ele pode ser possível para funcionar a aplicação em um único dispositivo.

Configuração
Note que para trabalhar com o emulador KToolbar os MIDlets deve ser instalado através de OTA (Over The Air). Para isso, deve-se escolher a opção no menu do projeto “Funcionamento com OTA”. OTA não é necessário ao instalar os MIDlets em telemóveis.
Ao configurar o número da central de mensagens de recebimento do dispositívo, é recomendo que se edite o arquivo .jad com o número apropriado. Para isso, apenas mude o parâmetro “PhoneNumber: 07311112233” com o número central de mensagens de sua operadora.

A linha  no arquivo .jad registra o SMS limite na porta 16555 da classe Pong

MIDlet-Push-1: sms://:16555, Pong, *

No Ping, o menu de configuração permite que o usuário defina o número da porta do telemóvel de destino do SMS. Os padrões são lidos nas definições do aqruivo .jad nos parâmetros “PhoneNumber” e “PortNumber”.
Na tela de operação, o usuário pode emitir o SMS. As etapas da operação são relatadas na tela. Devido a isto deixa a aplicação ser responsiva, a operação da emissão é realizada em sua própria thread.
Devido a presença do MIDP 2.0 security framework, o usuário será alertado e solicitado a permitir ou negar o acesso a determinadas partes restritas da API. Para o desenvolvedor, isto significa que determinadas chamadas restritas a API lançam exceções - java.lang.SecurityException. O método da emissão é um exemplo. Se o usuário negar o acesso para usar a conexão, a operação falhará.

Quando Pong for iniciiado, a chamada é:

PushRegistry.listConnections(true)

Retornando uma lista com todas as conexões e dados disponíveis. O fato é, que os dados estão disponíveis somente no momento da emissão, embora um tanto incerto, o indicador de que Pong seja iniciado automaticamente. Se nenhuma conexão for encontrada, uma chamada será feita a:

PushRegistry.listConnections(false)

Em conexões onde os dados ainda não estão disponíveis, existe um indicador de retorno de que Pong foi iniciado manualmente. As duas caixas são tratadas igualmente no código além de uma linha do texto na tela principal que diz, se ou não nós foi definido o inicio automático do Pong. Existem muitas técnicas, mas decidiu-se que o tráfego baixo que a aplicação gera estaria servido bem com um MessageListener.

MessageConnection mc = (MessageConnection)
      Connector.open(connections[i]);
      mc.setMessageListener(this);
      listeners.addElement(mc);

Desta maneira, sempre que uma mensagem nova chega, é feita uma chamada ao notifyIncomingMessage com a conexão que contem a mensagem.

Emitindo MMS usando a JSR 205

Com a JSR-120 (WMA-SMS) possibilitou MIDlets Java a emitirem mensagens de textos curtas, agora com JSR-205 (WMA-MMS) é introduzido a possibilidade emitissão e receber de mensagens multimídias usando a JME. Será mostrado um exemplo de cliente MMS.

 

A mensagem de MMS é formada por duas partes: o cabeçalho e o corpo da mensagem. Que é subdivido em duas partes, cada subdivisão é dividida em cabeçalho e o corpo possibilitando incluir diversas imagens ou arquivos em cada MMS.

 

Para criar a conexão e o cabeçalho da mensagem pode-se usar o seguinte código:

// nº do centro de mensagens da Operadora OI
String address = "mms://+550310000010";
msgConn = (MessageConnection)Connector.open(address);

           
mulMsg = (MultipartMessage) msgConn.newMessage(MessageConnection.MULTIPART_MESSAGE);

mulMsg.setAddress(address);
mulMsg.setAddress("mms://mail@mail.com");
mulMsg.setSubject("JAVA MMS TESTE");

Obs: Este MMS será emitido a um número de telefone e a um endereço do e-mail.

 

O cabeçalho "X-Mms-Delivery-Time" and "X-Mms-Priority" podem ser ajustado usando o método setHeader. Outros campos do cabeçalho são acessíveis indiretamente usando o objeto MultipartMessage

 

Aqui será adicionado uma mensagem ao MMS:

InputStream is = getClass().getResourceAsStream("image.jpg");
mimeType = "image/jpeg";
contents = new byte[is.available()];
is.read(contents);
msgPart = new MessagePart(contents, 0, contents.length, mimeType, "id2", "bg.jpg", null);
mulMsg.addMessagePart(msgPart);

Quando a mensagem é criada e as partes da mesma adicionadas, já é possível emitir o MMS.

msgConn.send(mulMsg);

Obs.: Para mais info download the JSR 205 (WMA 2.0) em  http://jcp.org/en/jsr/detail?id=205