Hospedagem Profissional

Hospedagem Profissional
Clique aqui e ganhe US$ 10,00 para testar durante 1 mês a melhor hospedagem: Digital Ocean!

sábado, 14 de março de 2009

Ativação de MIDlets através de Bluetooth

A partir da versão 2.0 da MIDP, os programadores Java podem permitir que aplicativos Java ME (MIDlets) possam ser iniciados de forma automática, sem intervenção do usuário. Este mecanismo é chamado de Push Registry. O objetivo desse post não é explicar de forma detalhada o Push Registry, porém, de forma sucinta, basta saber que é possível programar sua MIDlet pra iniciar automaticamente após um intervalo de tempo ou, com eventos externos, como chegada de mensagem SMS, MMS, Bluetoooth, conexão por socket etc.

A Figura anterior mostra as formas de ativação de uma MIDlet. A “Manual Activation by user” é a forma normal, onde o usuário vai até o menu de aplicativos do dispositivo e inicia a aplicação. Os dois modos de ativação ao lado foram adicionados com o advento do Push Registry.
Bem, dito isso, uma das formas de ativação de MIDlet é com conexão Bluetooth. Para fazer isso, podemos usar a JSR-82, um pacote ocional do Java ME para troca de dados entre dispositivos através de uma conexão Bluetooth ou, utilizar a API Marge. Esta API criada por brasileiros, facilita a criação de aplicativos que utilizem Bluetooth, escondendo um pouco a complexidade da JSR-82.
Para adicionar o mecanismo de Push Registry a um aplicativo tem duas formas: estática ou dinâmica. A forma estática é a mais simples, basta adicionar uma nova linha ao descritor da aplicação, o famoso .JAD. Além disso, é preciso dar permissão de uso para algumas classes. Veja as duas linhas que precisei colocar no arquivo JAD do meu projeto:

MIDlet-Permissions: javax.microedition.io.PushRegistry, javax.microedition.io.Connector.bluetooth.server, javax.microedition.io.Connector.bluetooth.client
MIDlet-Push-1: btspp://localhost:D0FFBEE2D0FFBEE2D0FFBEE2D0FFBEE2,hello.HelloMIDlet,*

A linha de permissões é auto explicativa, a linha MIDlet-Push-1 define um push registre estático. O btspp define o protocolo, a seguir definimos o dispositivo (localhost) e seu UUID como D0FFBEE2D0FFBEE2D0FFBEE2D0FFBEE2. Este UUID é um número de 32 bits que define um identificador único universal. Porque coloquei este número hexadecimal? Porque criei um servidor Bluetooth anteriormente no celular e mandei mostrar no display qual era o UUID que o servidor criado recebia, com isso, fiquei sabendo qual o código universal do aparelho. Depois da vírgula defini qual a classe que será iniciada com esse evento de push resgistry. Finalmente, no último parâmetro é possível criar filtros, no meu caso não coloquei nenhum, passando apenas *.
Bem, o leitor deve ter percebido que para fazer isso precisa conhecer o UUID do aparelho, oque não é muito usual, levando em conta que seu aplicativo será distribuído para N plataformas. Então, a solução é o push registry dinâmico, construído via código fonte. A listagem de código abaixo demonstra como criar um push registry dinâmico:

1: public void registra()
2: {
3:    ServerConfiguration config = new ServerConfiguration(this);//communicationListener
4:    config.setMaxNumberOfConnections(10);
5:    getFrmMain().append(”UUID: “+config.getUuid().toString());
6:    communicationFactory.waitClients(config, this);
7: 
8:    String midletClassName = this.getClass().getName();
9:    String url = “btspp://localhost:”+config.getUuid().toString();
10:    String filter = “*”;
11: 
12:    try
13:    {
14:       PushRegistry.registerConnection(url, midletClassName, filter);
15:    }
16:    catch (ClassNotFoundException ce)
17:    {}
18:    catch (IOException io)
19:    {}
20: }

Na linha 3 crei uma instância de ServerConfiguration, passando como parâmetro a própria classe que implementa a interface CommunicationListener. A linha 6 poderia ser removida, porque apenas inicia o servidor bluetooth e espera por conexão de clientes, porém, o objetivo aqui é só saber o UUID, mas, deixei a linha de código no lugar até para uma questão de aprendizado. As linhas 8, 9, e 10 definem os parâmetros que serão usados para a criação do push registry. Destaque para a linha 9, que utiliza o código config.getUuid().toString() para recuperar a UUID que é usada pela instância de ServerConfiguration que criei. Finalmente, na linha 14 é onde cria-se de fato o push registry.
Bem, acho que é possível notar que não é dificil fazer um Push Registry através de Bluetooth e, fica bem bacana.
Att.
Ping

Por Por Ricardo Ogliari
em http://www.mobilidadetudo.com/2008/10/ativacao-de-midlets-atraves-de-bluetooth.html