FONT-FAMILY: 'Verdana','sans-serif'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi"> 

 

Revisando o MIDP 2.0

Prepare-se para o novo padrão

 

O sucesso da tecnologia J2ME é inquestionável; hoje, ela já está presente em milhões de dispo­sitivos e impulsiona o crescente mercado de desenvolvimento wireless – de jogos a aplicativos móveis que se conectam a sistemas corporativos.

 

A versão 1.0 do MIDP (Mobile Information Device Profile), uma das principais partes do J2ME, inclui uma série de APIs sim­ples focadas em conectividade, interfaces gráficas, gerenciamento do ciclo de vida e persistência. Mas a simplicidade do MIDP 1.0, embora tenha facilitado o desenvolvimento de aplicações móveis independentes de plataforma, acabou por revelar-se como um dos seus principais pontos falhos. As lacunas deixadas pela primeira versão tiveram de ser supridas pelos fabricantes através de bibliotecas proprietárias voltadas a aparelhos espe­cíficos (dando margem à criação de apli­cações por alguns jocosamente chamadas de “MIDP 1.5”).

 

Para evitar o surgimento de uma “Torre de Babel J2ME”, uma nova especificação tornava-se necessária. Por essa e outras razões, nasceu o MIDP 2.0 (JSR-118).

Mais que MIDP

A necessidade de extensões proprie­tárias não é o único problema do MIDP 1.0. Mesmo sem a utilização de APIs de extensão, não é raro ver uma aplicação MIDP 1.0 que funciona em um grupo de dispositivos mas não em outro, ou que funciona de forma muito diferente em plataformas distintas.

 

Estas disparidades devem-se à ausência de uma especificação quanto à plataforma de execução. Deta­lhes como tamanho máximo dos MIDlets ou utilização de threads, por exemplo, são implementados de forma diferente em cada grupo de dispositivos. Outras funcionalidades críticas, como segurança e provisionamento (download e instalação de MIDlets) também foram omitidas na primeira versão do MIDP.

Omissões como essas foram claramen­te especificadas no JSR-185: JTWI (Java Technology for the Wireless Industry). Dessa maneira, o MIDP 2.0 é o conjunto de APIs por trás de toda uma nova plataforma de aplicações wireless.

Conectividade

A especificação MIDP 1.0 requeria que os dispositivos compatíveis implemen­tassem apenas conectividade utilizando HTTP; outros protocolos poderiam ou não ser implementados a gosto do fabri­cante. O MIDP 2.0 adiciona a exigência de implementação de HTTPS (HTTP sobre SSL), possibilitando o desenvolvimento de aplicações que não podem prescindir de segurança na comunicação, tais como soluções financeiras ou de m-commerce.

 

Entre as novidades do MIDP 2.0 para o trabalho com conexões seguras, estão as interfaces javax.microedition.io.HttpsConnection e  javax.microedition.io.SecurityInfo (para geren­ciamento de informações de conexão, tais como nome do protocolo e certificados em uso) e a classe javax.microedition.pki.Certificate (que representa um certificado de crip­tografia).

 

Além do suporte a HTTPS, a especifica­ção recomenda que sejam implementados protocolos de conexão baseados em data­gramas (para envio de pacotes de dados sem garantia de entrega), sockets (para co­municação ponto-a-ponto) e server sockets (que possibilitam que o dispositivo abra uma porta e aguarde conexões externas, funcionando como um servidor). A es­pecificação MIDP 2.0 também define um modelo comum de comunicação serial que deve ser utilizado caso o dispositivo implemente esse tipo de comunicação.

A Listagem 1 exemplifica a utilização de alguns dos protocolos de comunicação. 

A Game API

A maioria das aplicações J2ME desenvol­vidas atualmente enquadra-se na categoria de jogos. Trata-se de um mercado em fran­ca expansão, e os especificadores do MIDP 2.0 perceberam bem as necessidades desta área. O pacote javax.microedition.lcdui.game – a Game API – contém novas classes que facilitam o desenvolvimento de jogos em 2D. A Game API já foi coberta em detalhes em edições anteriores da Java Magazine (veja o artigo de capa da Edição 10).

Interface gráfica

Uma das APIs que mais teve melho­rias no MIDP 2.0 foi a de interface com o usuário (pacote javax.microedition.lcdui). Foi ampliada significativamente a fun­cionalidade de componentes existentes, em especial de Item, base para todos os componentes visuais. Item agora conta com métodos para gerenciamento de tamanhos mínimo e preferido e inclui um mecanismo de layout (que antes era restrito a ImageItem).

 

Outra adição importante é a possibilida­de de relacionar Commands (eventos) a Items específicos. No MIDP 1.0, era possível apenas gerenciar eventos de tela inteira implementando a interface CommandListener, e Commands só podiam ser relacionados com telas (objetos Displayable). O MIDP 2.0 introduz a interface ItemCommandListener e métodos que permitem a adição de Commands e a associação desses listeners a Items. O modelo de programação é idêntico ao utilizado no gerenciamento de eventos em nível de tela.

 

A classe ChoiceGroup também ganhou atualizações. Agora conta com um novo modelo de visualização além dos an­tigos EXCLUSIVE e MULTIPLE: componentes ChoiceGroup do novo tipo POPUP são exibidas (geralmente) como ComboBoxes. Outra alteração é a possibilidade de definir individualmente o estilo de fonte de cada elemento de um ChoiceGroup. Além disso, as classes TextBox e TextField incluem novas restrições de conteúdo (input constraints), entre elas UNEDITABLE, que torna fixo o con­teúdo da caixa de texto, e SENSITIVE, que determina que o conteúdo do TextBox não seja armazenado no aparelho por se tratar de informação confidencial.

 

Por fim, dois componentes foram adicio­nados ao pacote lcdui: Spacer, que ajuda no layout de telas, e CustomItem, sem dúvida a adição mais significativa de todo o pacote lcdui – agora o desenvolvedor pode defi­nir seus próprios componentes visuais, criando uma subclasse de CustomItem e implementando seus métodos abstratos. A Listagem 2 mostra um exemplo de componente personalizado que muda de cor quando selecionado.

Diversas outras pequenas alterações foram feitas nas classes do pacote lcdui. Veja a Tabela 1.

...

Quer ler esse conteúdo completo? Tenha acesso completo