Esse artigo faz parte da revista WebMobile edição 17. Clique aqui para ler todos os artigos desta edição

imagem.JPG

Clique aqui para ler este artigo em PDFimagem_pdf.jpg

Java Mobile

Desenvolvendo aplicações Java ME com NetBeans - Parte I                  

 

O desenvolvimento de aplicações para dispositivos portáteis é um nicho de mercado que tem boa expectativa de crescimento, em virtude não só do aumento da capacidade desses aparelhos como também da comodidade que este tipo de aplicações traz a seus usuários.

Vamos iniciar uma série de artigos sobre o desenvolvimento de aplicações para dispositivos móveis com a tecnologia Java ME. Nosso objetivo é demonstrar o processo de desenvolvimento de uma aplicação com os recursos providos por essa tecnologia.

Neste primeiro artigo focaremos no trabalho com os componentes visuais da tecnologia estudada e como se dá a interação dos mesmos com a lógica de negócio do nosso aplicativo.

Para o cumprimento da tarefa descrita, faremos uso do NetBeans 5.5 e do seu mobility pack, que auxilia o programador no desenvolvimento de soluções Java Mobile.

Entretanto, antes de começarmos a colocar a mão na massa vamos entender alguns conceitos. Vamos ver o que de fato é a tecnologia Java ME, o que são configurações e MIDP's.

Java ME

Java ME é um conjunto de tecnologias e especificações utilizadas para desenvolver aplicativos para determinados tipos de dispositivos.  Ela pode ser usada para a criação de programas para aparelhos que vão desde celulares até set-top boxes.

Diante dessa curta explicação sobre o que é Java ME surge uma pergunta: como essa tecnologia pode atender dispositivos com características tão distintas?

Para responder esse questionamento devemos focar a nossa atenção em mais dois conceitos: configurações e MIDPs.

Configurações definem um conjunto básico de bibliotecas e máquinas virtuais que podem ser utilizados por um determinado conjunto de dispositivos. Existem duas configurações definidas, a CLDC e a CDC.

A configuração CDC (Connected Device Configuration) é utilizada por dispositivos mais robustos como smartphones e set-top boxes.

Para efeito do nosso artigo, nos interessará a CLDC (Connected Limited Device Configuration), que é a configuração para dispositivos com uma maior limitação com relação aos seus recursos. Nessa modalidade se enquadram os aparelhos celulares.

Essa configuração foi especialmente desenvolvida para abranger os dispositivos com uma capacidade reduzida de memória e baixo poder de processamento.

As configurações correspondem à parte mais baixo nível da tecnologia Java ME. Em razão disso, desenvolver diretamente sobre elas acarreta em um maior trabalho ao programador.

Para facilitar o trabalho do desenvolvedor e também melhor abranger a imensa quantidade de dispositivos que existem temos as MIDPs (Mobile Information Device Profile).

As MIDPs são constituídas por um conjunto de APIs de alto nível que auxiliam no desenvolvimento de uma aplicação móvel. As MIDP's facilitam o trabalho de estabelecer a conexão entre dispositivos, armazenar informações, entre outras coisas.

Existem três tipos de MIDPs para a configuração CLDC. Elas são MIDP 1.0, MIDP 2.0 e a MIDP 2.1. Mais informação sobre estes três perfis podem ser encontradas em http://java.sun.com/products/midp/.

De um modo geral, temos a seguinte arquitetura para uma aplicação Java ME CLDC. Uma camada de mais baixo nível (CLDC), que interage diretamente com os recursos do aparelho. Um conjunto de APIs de alto nível que facilitam o trabalho do programador (MIDPs) e outros pacotes opcionais, definidos pela JSR 248.

Em linhas gerais, a JSR (Java Specification Request) é um documento enviado ao PMO (Program Manegement Office) pedindo o desenvolvimento de uma nova especificação ou a revisão profunda de uma especificação já existente. O PMO é um grupo dentro da Sun responsável por 'supervisionar' o trabalho do JCP. JCP (Java Community Process) é o grupo que participa do trabalho de desenvolvimento e revisão da tecnologia Java.

Em linhas gerais, podemos citar duas importantes JSR's para o desenvolvimento de aplicações para dispositivos móveis. A JSR 185 que trabalhou em um padrão para o desenvolvimento de aplicações para celulares e a JSR 248 que deu continuidade ao trabalho, tendo como foco aparelhos mais robustos e a incorporação de novas tecnologias.

A representação desta arquitetura (ver Figura 1) pode ser encontrada na página da Sun, no endereço http://java.sun.com/javame/technology/index.jsp.

 

imagem

Figura 1. Arquitetura Java ME CLDC

 

Quanto às Midlets, elas serão tratadas mais adiante, por hora posso dizer que chamamos de Midlet as aplicações que rodam sobre as MIDPs.     

Obtendo o Netbeans

Neste artigo será utilizado o NetBeans 5.5. O endereço da página do NetBeans é

http://www.netbeans.org/.

Obtendo o Mobility Pack

O Mobility Pack consiste em um Add on do NetBeans que facilita o trabalho de desenvolvimento de aplicações Java ME.

Este Add on pode ser obtido no endereço http://www.netbeans.org

/products/mobility/. Nesta página existe uma explicação a cerca do que ele é capaz de fazer.

Definindo nossa aplicação

O objetivo deste artigo é trabalhar no desenvolvimento da interface de uma aplicação Java ME utilizando elementos de alto nível.

Para tanto, o trabalho da nossa aplicação será armazenar todos os atendimentos que o funcionário de uma empresa faça na casa dos seus clientes e posteriormente listar estes atendimentos.

A interface da nossa aplicação contará com três telas, que serão a tela inicial, a de cadastro e a de listagem.

O aplicativo desenvolvido, em razão da sua simplicidade, será constituído por apenas duas classes. A primeira será responsável pelo armazenamento de informações, listagem e cálculo do valor total, chamada de Atendimento. A segunda será a classe principal da aplicação. Esta classe se chamará Cobrador (midlet). Nela ficará o código responsável por criar as telas da aplicação e também chamar a lógica definida na classe Atendimento.

Criando nossa aplicação no NetBeans

  Agora iremos criar um projeto no NetBeans e observar como ele, em conjunto com o Mobility Pack, podem ajudar no desenvolvimento das telas da aplicação.

 

Criação do projeto

  O primeiro passo para a criação de um projeto Java ME no NetBeans é clicar na opção “Arquivo” e escolher  Novo Projeto...”. Feito isso aparecerá a janela apresentada na Figura 2.

 

imagem

Figura 2. Criação do Projeto.

 

Na janela “Novo Projeto” podemos verificar três quadros. O quadro Categorias referente ao tipo de projeto que iremos criar. Neste quadro selecione a opção Mobile. No quadro Projetos, é possível escolher a modalidade de projeto em que trabalharemos. Selecione a opção Mobile Application.

Ao clicar em “Próximo >” na Figura 2, surgirá mais uma tela onde serão informados o nome e a localização do projeto, como vemos na Figura 3.

 

imagem

Figura 3. Escolhendo nome e localização do projeto

 

De acordo com a Figura 3, no campo “Project Name” informaremos o nome do projeto (atendimento_domicilio).

No próximo campo (Project Location) indicaremos a pasta em que será criado o projeto. O caminho para a pasta onde ficará o projeto pode ser visto no campo “Project Folder”.

Ainda nessa janela marcaremos o projeto como principal. Para isso, apenas marcaremos a opção “Set as Main Project”.

Há ainda uma opção que não marcaremos (Create Hello Midlet). Se marcarmos essa caixa o projeto será inicialmente criado com uma midlet. Contudo, não selecionaremos essa opção para que possamos, já com o projeto definido, criarmos a nossa midlet. Como dito anteriormente, mais adiante farei uma explicação a cerca do que é uma midlet. Definidos os pormenores desta etapa clicamos em “Próximo >”.

Na janela seguinte escolhemos a plataforma em que será desenvolvida a aplicação, o emulador em que ela será visualizada, a sua configuração e a MIDP, conforme vemos na Figura 4.

 

imagem

Figura 4. Definindo Características da Aplicação

 

Analisando a Figura 4, em “Emulator Plataform” definimos a plataforma sobre a qual o nosso projeto será desenvolvido.

No campo “Device” definimos o dispositivo para o qual será desenvolvida a aplicação e conseqüentemente o emulador em que a aplicação será visualizada.

Ainda nesta janela escolheremos a configuração do aparelho da nossa aplicação na opção “Device Configuration”. São disponibilizadas as opções de configuração CLDC 1.0 e CLDC 1.1.

Por fim definimos o MIDP do dispositivo para o qual estamos desenvolvendo a nossa aplicação. Esta escolha é feita na opção “Device Profile”. As opções disponíveis são MIDP-1.0 e MIDP-2.0.

Feitas as escolhas desta janela devemos apertar o botão “Próximo >” e partir para a última etapa da criação do nosso projeto. Nela poderemos fazer mais algumas configurações. Nesta janela, de acordo com a Figura 5, podemos criar configurações adicionais para o nosso projeto partindo de algum template que está exposto na janela.

Essa é uma tarefa adicional e optaremos por não segui-la. Não selecionaremos nenhum dos templates que aparecerem. Finalizaremos o nosso projeto clicando no botão “Finalizar”.

 

imagem

Figura 5. Janela de Configurações adicionais

 

Criando uma Midlet

De um modo geral podemos definir midlets como aplicações Java que rodam sobre dispositivos MIDP. Em termos mais específicos podemos dizer que midlets são classes que herdam da classe javax.microedition.midlet.Midlet, onde esta é uma classe abstrata.

As midlets têm um ciclo de vida bem definido que é controlado pelos métodos da classe Midlet. Estes métodos de controle devem ser implementados por todas as midlets.

Os métodos que auxiliam no controle do ciclo de vida de uma midlet são startApp(), pauseApp() e destroyApp(boolean incondicional). Como estes métodos são abstratos, a sua implementação é obrigatória por toda a classe que herde de Midlet. A criação do construtor da classe que herda de Midlet é uma tarefa opcional.

Uma midlet pode assumir três estados, pausa, ativa e destruída. No momento em que está sendo carregada a midlet assume o estado de pausa.   

Logo após ser carregada em estado de pausa, a midlet é instanciada e seu construtor sem argumentos é chamado. Caso aconteça alguma falha durante a execução do construtor a midlet passa para o estado destruída.

Se a execução do construtor acontecer sem qualquer problema, a midlet passará do estado de pausa para o estado ativo. Isso é feito através de uma chamada ao método startApp().

A midlet irá permanecer no estado ativo a menos que seja detectado algum erro. Erros podem fazer com que a midlet passe do estado ativo para pausa ou para destruído independente da intenção do desenvolvedor.

Para uma midlet sair do estado ativo para o estado de pausa basta que seja chamado o método pauseApp(). Esta situação pode acontecer a qualquer momento, como quando o usuário recebe uma ligação. Da mesma forma como acontece com o método startApp(), o método pauseApp() também deverá ser implementado pelo usuário.

Para encerrar uma midlet basta que seja feita uma chamada ao método destroyApp(boolean incondicional). Ele é responsável por fechar threads e liberar recursos que foram alocados pela midlet. O argumento passado para esse método tem a função de informar se a midlet deve ser encerrada liberando recursos e encerrando threads, independente do que esteja acontecendo ou se ela deve respeitar os recursos alocados a fim de que a midlet cumpra as suas tarefas antes de ser terminada.

Na primeira situação deverá ser passado como parâmetro o valor true, no segundo caso o valor para o parâmetro deve ser false. Quando o valor do parâmetro passado ao método destroyApp for false, se a midlet ainda estiver usando algum recurso ela não poderá ser encerrada e lançará a exceção  MidletStateChangeException. Assim, o parâmetro false indica que o destroyApp atuará de forma condicional.

O método notifyDestroyed() é utilizado para encerrar uma midlet por desejo do usuário, quando não há mais necessidade de que ela continue em estado ativo.

 

Criando uma midlet no NetBeans

Agora podemos começar o nosso trabalho de criação através do NetBeans. A primeira ação é clicar com o botão direito do mouse sobre o nosso projeto, atendimento_domicilio, e escolhermos respectivamente as opções “Novo” e “Visual Midlet...”. Prestando um pouco de atenção podemos observar que além da opção “Visual Midlet...” temos também a opção “Midlet...”.

A nossa opção pela primeira modalidade de midlet se dá em razão das facilidades que teremos para projetar a interface da nossa aplicação. ...

Quer ler esse conteúdo completo? Tenha acesso completo