You are on page 1of 40

TRABALHO DE FINAL DE CURSO

TECNOLOGIA J2ME: JAVA 2 MICRO EDITION

SANDRO DINIZ VALENTE 2005

ii

SANDRO DINIZ VALENTE

TECNOLOGIA J2ME: JAVA 2 MICRO EDITION

Trabalho de Fim de Curso apresentado Uniminas, como requisito parcial obteno do ttulo de Bacharel em Sistemas de Informao.

Orientador: Prof. Mestre Silvio Bacal Junior

UBERLNDIA 2005

iii

SANDRO DINIZ VALENTE TECNOLOGIA J2ME: JAVA 2 MICRO EDITION

Trabalho de Fim de Curso apresentado Uniminas, como requisito parcial obteno do ttulo de Bacharel em Sistemas de Informao. Orientador: Prof. Mestre Silvio Bacal Junior

Banca Examinadora: Uberlndia, 27 de Julho de 2005

_________________________________________________ Prof. Francisco Jos Muller _________________________________________________ Prof. Mrcio Caetano _________________________________________________ Prof. Slvio Bacal Jnior

iv

AGRADECIMENTOS

Agradeo aos meus pais, lvaro e Maria Tereza, pelo incentivo, pois sem eles esta jornada no estaria terminada. Ao professor Slvio Bacal Junior, pela orientao e ateno que foram fundamentais para a realizao deste trabalho. professora Ktia Lopes Silva pela ateno e seriedade que ela proporcionou a todos os alunos do curso. todos os colegas que com o passar do tempo se mostraram verdadeiros amigos. UNIMINAS pela estrutura e seriedade no trabalho. Valria, por me mostrar durante todo esse tempo, que pessoas boas ainda existem.

RESUMO Com a massificao da Internet em mbito mundial, diversas linguagens de programao surgiram e tornaram-se mais acessveis para pessoas com interesse em aprender ou desenvolver. Java foi uma delas, sendo aplicada em diversos setores como controles-remoto de aparelhos eletrnicos, fornos microondas, telefones celulares e, principalmente, computao. Levando em considerao essa diversidade de setores, houve a necessidade da criao de kits de desenvolvimento diferenciados para cada uma. O Java 2 Micro Edition, mais conhecido como J2ME, veio a atender dispositivos com pequena capacidade de memria, tais como telefones celulares e PDAs.

vi

ABSTRACT

With the Internets s massification in world-wide ambit, several programming languages came up and became more accessible to people interested in learning or developing. Java was one of them, being applied in diverse sectors like remote-controls of electronic equipments, microwave ovens, cellphones and, mainly, computation. Considering this sectors diversity, emerged the necessity to create kits of differentiated developments for each one. The Java 2 Micro Edition, most known as J2ME, came to attend devices with low memory s capacity, such as cellphones and PDAs.

vii

SUMRIO 1 INTRODUO...................................................................................................1 1.1 Um pouco sobre a linguagem Java................................................................1 2 UM ESTUDO SOBRE O J2ME .........................................................................3 2.1 Introduo.......................................................................................................3 2.2 Estrutura do J2ME..........................................................................................4 2.3 Configurao ..................................................................................................6 2.4 Perfil................................................................................................................7 2.5 Pacotes Opcionais..........................................................................................7 2.6 Divises do J2ME...........................................................................................7 2.6.1 A CLDC e seus perfis ..............................................................................7 2.6.1.1 Os Perfis da CLDC: o MIDP e o PDAP.............................................8 2.6.1.2 A KVM ...............................................................................................8 2.6.2 A CDC, seus Perfis e a CVM...................................................................9 2.6.2.1 Os Perfis da CDC: FP, PBP, PB, RMI e o GP ................................10 2.6.2.2 A CVM .............................................................................................10 2.7 MIDLet ..........................................................................................................10 3 INSTALANDO E CONFIGURANDO O J2ME WIRELESS TOOLKIT .............12 3.1 Por qu o Wireless Toolkit? .........................................................................12 3.2 Instalando o J2SDK......................................................................................12 3.3 Instalando o Wireless Toolkit .......................................................................12 4 J2ME NA PRTICA .........................................................................................14 4.1 Entendendo a estrutura dos diretrios .........................................................16 4.2 O MIDlet........................................................................................................17 4.2.1 Estrutura bsica de um MIDlet. .............................................................17 4.2 O MIDlet Ol Mundo ..................................................................................18 5 PROGRAMAS E CDIGOS............................................................................21 5.1 Worm Game .................................................................................................21 5.1.1 A classe WormFood...............................................................................21 5.2 Manipulao de imagens..............................................................................24 6 ESTUDO DE CASO ........................................................................................26 6.1 Obtendo imagens de uma webcam em um telefone celular........................26 6.1.1 Ajustando o ambiente ............................................................................27 6.1.2 Parte do cdigo......................................................................................27 6.1.3 Mais webcams .......................................................................................29 7 CONCLUSO ..................................................................................................30 8 REFERNCIAS BIBLIOGRFICAS................................................................31

viii

LISTA DE FIGURAS Figura 1: Primeiro projeto do Green............................................................................ 1 Figura 2: Edies da Plataforma JAVA 2................................................................... 3 Figura 3: A Famlia Java ............................................................................................... 5 Figura 4: As camadas do J2ME................................................................................... 6 Figura 5: A CLDC,.......................................................................................................... 8 Figura 6: A CLC,............................................................................................................. 9 Figura 7: O ciclo de vida de um MIDLet ................................................................... 11 Figura 8: Grupo de trabalho do J2ME Wireless Toolkit. ........................................ 13 Figura 9: Tela inicial de um projeto. .......................................................................... 14 Figura 10: Nomeando o projeto e a classe.............................................................. 14 Figura 11: Tela com configuraes finais para o incio do projeto....................... 15 Figura 12: Tela Required . ........................................................................................ 16 Figura 13: Estrutura dos diretrios. ........................................................................... 17 Figura 14: Estrutura bsica de um MIDlet. .............................................................. 18 Figura 15: Cdigo fonte do programa Ol Mundo. ................................................. 19 Figura 16: Classe WormFood. ................................................................................... 22 Figura 17: Classe WormFood. ................................................................................... 23 Figura 18: Classe WormFood. .................................................................................. 24 Figura 19: Tela de demonstrao de imagens........................................................ 25 Figura 20: Flashing Lighthouse. ................................................................................ 25 Figura 21: Esquema do funcionamento do sistema. .............................................. 27

ix

LISTA DE SIGLAS

J2ME J2SE J2EE PDA J2SDKEE JVM JSDK JRE JCP JSR WSDP JSP JDBC API MIDP PDAP CLDC CDC FP PP PBP RMIP GP KVM JCC

Java 2 Micro Edition Java 2 Standard Edition Java 2 Enterprise Edition Personal Digital Assistant Java 2 Software Development Kit Enterprise Edition Java Virtual Machine Java Software Development Kit Java Runtime Environment Java Community Process Java Specification Request Web Services Developers Pack Java Server Pages Java Database Connectivity Application Program Interface Mobile Information Device Profile PDA Profile Connected Limited Device Configuration Connected Device Configuration Foundation Profile Personal Profile Personal Basis Profile Remote Method Invocation Profile Game Profile Kilobyte Virtual Machine Java Code Compact

1 INTRODUO 1.1 Um pouco sobre a linguagem Java No incio dos anos 90, a Sun Microsystem criou uma nova linguagem de programao com o objetivo de trabalhar em dispositivos eletrnicos, como por exemplo TVs interativas, microondas, video games, etc. Tal linguagem era chamada de Oak e o grupo que desenvolvia aparelhos eletrnicos que trabalhava com a linguagem Oak se chamava Green Team. O primeiro projeto do Green foi um dispositivo com tela LCD Touchscreen que funcionava como controle remoto de TV, Video Cassete entre outros dispositivos. O software para esse dispositivo teria que ser totalmente confivel e no poderia exigir muito do hardware, devido s suas limitaes de memria e processamento. O Green Team pensando nisso desenvolveu a linguagem Oak utilizando boa parte da linguagem C++ e excluindo aquilo que acharam ruim. Como resultado teria-se ento uma linguagem pequena, leve, segura e portvel.

Figura 1: Primeiro projeto do Green Fonte: Sun Microsystem http://java.sun.com/people/jag/green/index.html

Com o sucesso do projeto, o Green Team foi transformado numa empresa e vrios projetos foram a frente. Contudo, o sucesso durou pouco e vrios contratos foram rompidos. Sem saber o que fazer com a linguagem Oak (alm de que a Sun teria que mudar o nome da linguagem, pois Oak j estava registrado para outros fins) a Sun enxergou uma luz no fim do tnel com a exploso da Internet, pois a linguagem agora conhecida como Java poderia entrar no mercado da World Wide Web para substituir as tradicionais pginas HTML por pginas dinmicas. Desde ento a Sun comeou a obter resultados satisfatrios com Java.

Este trabalho tem por objetivo mostrar os aspectos da tecnologia J2ME, suas caractersticas e como programar nela, tendo em vista que a computao mvel e a telefonia celular so realidades cada vez maiores no mundo de hoje, e tal tecnologia permite que desenvolvedores e curiosos faam seus prprios aplicativos para os dispositivos mveis. O trabalho est dividido em 7 captulos, onde sero abordados conceitos bsicos da linguagem Java, preparao do ambiente de trabalho, demonstraes de trechos de cdigos para exemplo, um estudo de caso onde mostrar uma curiosa e til aplicao e uma anlise de mercado.

2 UM ESTUDO SOBRE O J2ME 2.1 Introduo Atualmente o Java encontra-se na sua seguinda edio, a verso 1.4. Desde a verso 1.2, a Sun resolveu utilizar o prefixo J2 (Java 2) para indicar que seria a segunda verso da linguagem, pois desde ento as modificaes seriam to grandes em relao verso 1.1 que seria interessante utilizar o J2 para indicar qual verso estaria sendo utilizada. O Java conta com 3 diferentes tipos de pacotes, sendo eles: - J2SE (Java 2 Standard Edition): a verso mais utilizada, destinada ao desenvolvimento de aplicativos para desktops e estaes de trabalho. - J2EE (Java 2 Enterprise Edition): Destinada ao desenvolvimento de grandes aplicaes, como cliente-servidor. - J2ME (Java 2 Micro Edition): Verso destinada ao desenvolvimento para dispositivos com pequena capacidade de memria e processamento. Ser o foco deste trabalho.

Figura 2: Edies da Plataforma JAVA 2 Fonte: Sun Microsystem http://java.sun.com

Outras definies importantes: - JVM (Java Virtual Machine): A JVM responsvel por interpretar os arquivos .class (pr-compilados) da linguagem Java. Ela considerada o corao da linguagem Java, pois simula uma mquina dentro de um computador. Em alguns casos, a JVM tambm compila alguns trechos do cdigo (just-in-time compiler), a fim de acelerar o processo de execuo. - JSDK (Java Software Development Kit): o ambiente de desenvolvimento da linguagem Java. Ele inclui a JVM, compilador, appletviewer, algumas bibliotecas bsicas entre outras coisas. - JRE (Java Runtime Environment): Pacote aconselhado somente para executar as aplicaes, contendo nele a JVM e algumas bibliotecas. No possvel compilar cdigo Java apenas com isto. Como a JVM pode ser incorporada a aparelhos das redes de gerao 2,5 (2,5G), a tecnologia J2ME tornou-se a principal ferramente de desenvolvimento para aplicativos de aparelhos desta gerao. Empresas como Motorola, Nokia, Siemens e algumas operadoras telefnicas esto investindo nesta tecnologia.

2.2 Estrutura do J2ME Na computao tradicional temos grandes computadores com bastante capacidade de memria, processamento, display, interface com o usurio e outros aspectos considerados padres pelos usurios atuais. Os pequenos dispositivos como telefones celulares e PDAs no seguem essas caractersticas, pois todos eles tem pouca capacidade de memria, alguns tem uma interface totalmente limitada com o usurio e outras limitaes. Pensando desta forma, programas utilizados em computadores normais nunca poderia ser usados nestes pequenos dispositivos, pois as funes e estruturas dos programas teria que ser mais flexveis devido ao tipo de Hardware. O J2ME tenta criar um padro para estes dispositivos que so to diferentes entre si. A Sun tentou unificar essa estrutura com seus outros pacotes, o J2EE e o J2SE.

Figura 3: A Famlia Java Fonte: Sun Microsystem - Datasheet Java2 Platform, Micro Edition http://java.sun.com/j2me/docs/j2me-ds.pdf

A arquitetura J2ME no subistitui o sistema operacional dos dispositivos em que trabalha, e sim consiste em camadas acima dele. A camada superior seriam os Profiles, seguido pela camada Configuration, Java Virtual Machine e o sistema operacional (Host Operating System) abaixo (figura 4). A primeira camada, a JVM, interpreta os cdigos fontes da linguagem Java e os tranforma em cdigos de mquina para que o sistema operacional possa entender. A Configurao (ou Configuration) trabalha como segunda camada e tem por funco definir uma classe de Hardware a qual est trabalhando, atualmente sendo duas, separando-as em duas famlias. A Configuration possui as bibliotecas principais do ncleo do J2ME. A terceira camada so os Perfis (ou Profiles), que so APIs (Application Program Interface) que complementam e trazem novas funcionalidades ao Configuration.

Figura 4: As camadas do J2ME Fonte: Sun Microsystem http://java.sun.com/products/cldc/wp/KVMwp.pdf

2.3 Configurao A Configurao (Configuration) define uma especificao de ambiente de Software para uma determinada faixa de dispositivos, definidos por caractersticas de Hardware como interface, memria, processamento entre outras. A Configurao representa uma plataforma mnima de desenvolvimento para cada tipo de dispositivo e nela so permitidos recusrsos adicionais. Os fornecedores de dispositivos devem implementar completamente as especificaes da Configurao para que os desenvolvedores possam ter um ambiente de desenvolvimento que funcione corretamente para tal dispositivo. Cada Configurao tem uma JVM e uma coleo ncleo de classes Java. Como os dispositivos em questo no possuem grande capacidade de memria e processamento, impossvel que o J2ME suporte todos os recursos das JVMs utilizadas pelo J2SE por exemplo, sendo assim necessrio que toda Configurao tenha sua prpria JVM. Os fornecedores de dispositivos no so obrigados a utilizarem a VM da Sun, eles podem fabricar as suas prpria ou utilizarem a de terceiros, desde que tais VMs sigam os requisitos mnimos das especificaes das Configuraes encontradas na Sun. Atualmente existem 2 Configuraes definidas no J2ME: a CLDC (Connected Limited Device Configuration) e a CDC (Connected Device Configuration).

2.4 Perfil O Perfil (ou Profile) uma API que complementa uma Configurao, implementando classes adicionais que fornecem mais recursos para um determinado dispositivo. Alguns Perfis que tm sua reviso final ou esto em fase de finalizao so: MIDP (Mobile Information Device Profile) e PDAP (PDA Profile) usados na CLDC, e o FP (Foundation Profile), PP (Personal Profile), PBP (Personal Basis Profile), RMIP (Remote Method Invocation Profile) e GP (Game Profile) que trabalham com a CDC. 2.5 Pacotes Opcionais Os pacotes opcionais (optional packages) so um conjunto de APIs, mas no definem um ambiente completo de aplicao, como os Perfis. Eles so utilizados com as Configuraes e Perfis para extender funcionalidades no encontradas nos mesmos. 2.6 Divises do J2ME O J2ME dividido em duas configuraes, que so a CLDC (Connected Limited Device Configuration) e o CDC (Connected Device Configuration).

2.6.1 A CLDC e seus perfis A CLDC (figura 5) a configurao mais conhecida do J2ME. Tal configurao est presente na maioria dos telefones celulares de hoje, no qual uma grande parte do mercado est interessada, pois existem muitos atrativos para as operadoras, fornecedores e desenvolvedores. Essa configurao tambm est presente em pagers e e PDAs com processamento limitado e no PalmOS. Os dispositivos com as seguintes caractersticas so atendidos pela CLDC: De 128K 516K de memria disponvel; Processador de 16 ou 32 bits; Fornecimento de energia limitado, geralmente usa baterias; Conectividade com alguns tipos de rede, geralmente de baixa velocidade (9.600kbps); Interface com o usurio limitada.

Existem duas verses da CLDC: a CLDC 1.0 e CLDC 1.1. Na primeira no existe ponto flutuante, o que foi corrigido no segunda verso.

Figura 5: A CLDC, Perfis e a KVM Fonte: Sun MicrosystemTM http://java.sun.com/j2me/docs

2.6.1.1 Os Perfis da CLDC: o MIDP e o PDAP O Persil usado na CLDC o MIDP (Mobile Information Device Profile). Este Perfil uma API que adiciona ao CLDC a possibilidade de trabalhar em rede usando o protocolo http 1.1. o Perfil mais conhecido do J2ME porque a base do uso Wireless do Java e o nico Perfil para o PalmOS. O Perfil PDAP (PDA Profile) similar ao MIDP, porm seu foco est nos PDAs.

2.6.1.2 A KVM A primeira mquina virtual utilizada na CLDC foi a KVM (Kilobyte Virtual Machine). Ela a menor mquina virtual Java completa criada, pois mantm as propriedades centrais da linguagem e roda em dispositivos muito limitados, com apenas algumas centenas de kilobytes de memria. A KVM no compila o cdigo e sim interpreta o mesmo para o sistema operacional. Devido grande necessidade de implementar novas classes aos Perfis e o problema de falta de memria dos dispositivos, a Sun desenvolveu uma tcnica denominada ROMizing , que consiste em gravar as classes e bibliotecas mais utilizadas pela aplicao em um chip que ser introduzido no aparelho. Tal processo ajuda a KVM, pois aquelas classes ou bobliotecas mais utilizadas estaro j gravadas em um chip, evitando que a KVM tenha que interpret-las, gastando assim menos tempo e recursos do sistema.

2.6.2 A CDC, seus Perfis e a CVM Para telefones celulares e outros dispositivos com a mesma capacidade de memria, temos a CLDC que vem cumprindo seu papel atendendo os desenvolvedores. Para aplicaes de maior porte, como as que rodam em estaes de trabalho, temos os J2SE atendendo uma boa demanda de desenvolvedores. Mas entre esses dois extremos, existem dispositivos que no so atendidos completamente pelo J2ME e no suportam o J2SE, como decodificadores de canais de televiso. Essa lacuna preenchida pela CDC (Connected Device Configuration) e seus Perfis (figura 6). A CDC foi desenvolvida para atender dispositivos com as seguintes caractersticas: Mnimo de 2MB de memria disponvel; Processador de 32 bits; Conectividade intermitente ou permanente com a rede, freqentemente direto com a Internet ou baseada em TCP/IP; Suporta uma implementao completa da Java Virtual Machine; Dispositivos sem nenhuma interface com o usurio ou at aqueles com interface muito sofisticada.

Figura 6: A CLC, Perfis e a CVM Fonte: Sun Microsystem http://java.sun.com/j2me/docs

10

2.6.2.1 Os Perfis da CDC: FP, PBP, PB, RMI e o GP O principal Perfil utilizado na CDC o Foundation Profile (FP), onde est nele includo todas as bibliotecas do ncleo Java 2 verso 1.3 e usado para atuar como base para a maioria dos outros perfis. O Personal Basis Profile (PBP) adiciona funcionalidades bsicas de interfaces com o usurio ao FP e usado em dispositivos com capacidade de interface no muito sofisticada e que no permite mais de uma janela ativa ao mesmo tempo. J os dispositivos com interfaces de usurio mais sofisticada e complexa usam o Personal Profile (PP) que contm classes para implementar essas interfaces, possui muito mais recursos, inclusive com mltiplas janelas. O RMI Profile (RMIP) adiciona bibliotecas do J2SE Remote Method Invocation ao FP, mas somente o lado cliente desta API suportada. O Game Profile estava em estudo para fornecer uma plataforma para desenvolvimento de Jogos para dispositivos que usam o CDC. No momento o desenvolvimento do GP foi interrompido e no certeza se esse perfil derivar do FP ou diretamente do CDC, ou ainda se ser abandonado e substitudo por um novo perfil ou uma atualizao de um perfil j existente.

2.6.2.2 A CVM A CVM a mquina virtual utilizada na CDC. Ela apresenta as mesmas funes da VM usada no J2SE, porm otimizada para utilizar o mnimo de memria possvel. Apesar dessa caracterstica importante, ela no possui um compilador como no J2SE, apenas um interpretador de byte-code, porm muito mais otimizado do que a KVM do J2ME.

2.7 MIDLet MIDLet o nome das aplicaes feitas em J2ME, assim como applets so as aplicaes do J2SE e os servlets do J2EE. O nome MIDLet veio devido ao perfil MIDP, o mais conhecido e utilizado no J2ME. O MIDLet possui um ciclo de vida importante a ser mostrado, que o seguinte: startApp(): chamado quando o MIDLet ativado ou quando sai de um estado de pausa. pauseApp(): utilizado para pausar o MIDLel momentaneamente, como por exemplo no momento em que o usurio est utilizando algum jogo e o telefone toca. destroyApp(): um valor booleano, utilizado para encerrar o aplicativo.

11

O MIDLet pode ser carregado sozinho ou em um conjunto de MIDLets chamado MIDLet-Suite. A segunda opo torna possvel carregar vrios MIDLets ao mesmo tempo, principalmente se eles precisarem interagirem entre si, compartilhando dados ou recursos. Os MIDLets de uma suite no conseguem acessar dados e recursos de outra suite.

Figura 7: O ciclo de vida de um MIDLet Fonte: DevX.com http://www.devx.com/wireless/Article/11068/0/page/3 http://www.devx.com/assets/articlefigs/4920.gif

No prximo captulo, discutiremos a preparao do ambiente de trabalho tal como os pr-requisitos necessrios para a instalao do J2ME Wireless Toolkit.

12

3 INSTALANDO E CONFIGURANDO O J2ME WIRELESS TOOLKIT

3.1 Por qu o Wireless Toolkit? Neste trabalho, foi implementado o cdigo do programa exemplo utilizando o J2ME Wireless Toolkit. Tal escolha foi um tanto quanto bvia: a linguagem Java de propriedade da SUN, e o J2ME Wireless Toolkit tambm. Assim, por obrigao a SUN deve manter uma certa compatibilidade entre a linguagem e seu kit de desenvolvimento, tornando assim mais fcil a tarefa para dos desenvolvedores. Existem alguns pr-requisitos que o usurio deve prestar ateno antes de comear a instalao do programa: O J2SDK (Java 2 Software Development Kit). A ltima verso do J2ME Wireless Toolkit.

3.2 Instalando o J2SDK O Java 2 Software Development Kit, ou simplesmente J2SDK, um pacote obrigatrio para a programao em Java, tanto em J2ME, J2SE e J2EE. Tal kit contm a mquina virtual Java, compiladores e interpretadores para rodar os aplicativos feitos pelo usurio. Sem o J2SDK impossvel utilizar o J2ME Wireless Toolkit de forma completa, apesar de que o mesmo pode ser instalado no sistema e executado, mas no pode compilar novos programas. O J2SDK pode ser baixado no site da SUN (http://www.sun.com) e deve ser instalado antes do J2ME Wireless Toolkit. A verso utilizada neste trabalho foi a 1.4.1.07. A instalao simples e basicamente o usurio escolhe a instalao padro e clica em next , sem ter que alterar nada. Aps ser instalado, o usurio dever reiniciar o computador.

3.3 Instalando o Wireless Toolkit Chegou a hora de instalar o programa propriamente dito (que tambm pode ser encontrado no site da SUN). importante como pr-requisito para a instalao do J2ME, o J2SDK instalado no computador. A verso utilizada do J2ME Wireless Toolkit utilizada neste trabalho a 2.1. Ao comear a instalao, o usurio escolhe os componentes a serem instalados e o diretrio para o programa. Nota importante: No possvel instalar o programa em diretrios com espao ou caracteres especiais, como por exemplo C:\Program Files\WTK21. Como padro, instale em C:\WTK21.

13

A figura 8 mostra o grupo de trabalho quando o Wireless Toolkit instalado. Ser utilizado o Ktoolbar para mostrar como desenvolver um aplicativo.

Figura 8: Grupo de trabalho do J2ME Wireless Toolkit. Fonte: Tela capturada no desktop onde o aplicativo foi instalado. A instalao do programa termina aqui. No prximo captulo ser mostrado o funcionamento do J2ME Wireless Toolkit com um programa exemplo.

14

4 J2ME NA PRTICA O primeiro aplicativo que o usurio deve se familiarizar o compilador de cdigos. Isso porqu ele no um editor como toda linguagem de programao oferece, e sim um mero compilador onde o cdigo feito em qualquer editor de textos ser compilado. A figura 9 mostra a tela inicial de um projeto, ou seja, nenhum cdigo. Para iniciar um novo projeto, deve-se clicar em File e depois New Project . A tela da figura 11 ser mostrada.

Figura 9: Tela inicial de um projeto. Fonte: Desktop.

importante utilizar o mesmo nome para o projeto e a classe, pois isso evita futuras confuses ao analisar ou gerenciar os arquivos gerados pelo Wireless Toolkit. Ser usado o nome Cobra para o projeto e classe.

Figura 10: Nomeando o projeto e a classe. Fonte: Desktop.

15

Ao clicar em Create Project na tela anterior, mostrada a tela da figura 11. muito importante nesse momento saber para qual dispositivo estamos programando, pois a hora de escolher a verso do CLDC (1.0 ou 2.0). Neste projeto, ser usada a verso 1.0 por questes de maior compatibilidade com os dispositivos atuais.

Figura 11: Tela com configuraes finais para o incio do projeto. Fonte: Desktop.

A figura 12 mostra uma parte importante do projeto, a tela Required . Nela, encontram-se informaes sobre o nome do arquivo .JAR do projeto, a verso do CLDC escolhida anteriormente e no nome do proprietrio do projeto

16

MIDlet-Vendor , no qual pode ser alterado para o nome do usurio que est desenvolvendo a aplicativo. Aps clicar em OK , o projeto estar automaticamente salvo, mas ainda sem nenhuma linha de cdigo.

Figura 12: Tela Required . Fonte: Desktop.

4.1 Entendendo a estrutura dos diretrios Ao iniciar o projeto Cobra , o Wireless Toolkit (WTK) cria toda uma estrutura para os arquivos do projeto serem armazenados. Ela padro para qualquer novo aplicativo a ser desenvolvido. A figura 13 ilustra a estrutura.

17

Figura 13: Estrutura dos diretrios. Fonte: Desktop. Nota-se que o diretrio raiz do projeto Cobra est localizado em C:\WTK21\apps\Cobra. Nele existem vrias subpastas: src: onde ficam todos os cdigos fontes que sero compilados pelo Wireless Toolkit. res: onde ficam todas as imagens a serem visualizadas e utilizadas no projeto. lib: localizao das bibliotecas a serem utilizadas, podendo ser em formato ZIP ou JAR. bin: local onde so gerados os arquivos ZIP ou JAR e o arquivo JAD, que sero utilizados para a pr-verificao.

4.2 O MIDlet Na plataforma Java existe uma certa padronizao no nome das aplicaes. O Applet usado para a construo de um pequeno aplicativo que carregado pelo browser e roda na mquina do cliente. O Servlet um aplicativo que solicitado pelo browser e executado no servidor. J o MIDlet construdo para ser executado em pequenos componentes. 4.2.1 Estrutura bsica de um MIDlet. A classe MIDlet oferece trs mtodos abstratos que so usados pela aplicao. Eles so chamados partir do gerenciador de aplicaes do dispositivo, e so usados para se comunicar com os aplicativos que esto rodando. O mtodo "startApp" chamado imediatamente depois do construtor e cada vez que um aplicativo ativado, estiver visvel. Isto quer dizer que este mtodo no chamado somente quando o aplicativo iniciado, uma aplicao pode fazer a transio entre os estados de ativa e inativa muitas vezes durante o tempo em que est sendo rodada, e portanto deve-se evitar colocar cdigo de inicializao que s pode ser rodado uma nica vez. O mtodo "destroyApp" chamado pelo gerenciador de aplicativos para indicar que uma aplicao est prestes ser terminada. Ao contrrio do mtodo "startApp", este mtodo ser chamado uma nica vez durante o tempo de execuo de uma aplicativo sendo, portanto, recomendado o uso de "cdigo de limpeza" aqui, pois, como a MIDP no possui a capacidade de finalizar seus objetos, ento eles devem ser terminados, liberados no "destroyApp". O mtodo abstrato, "pauseApp", utilizado para notificar o aplicativo que est rodando est para ser pausado porque o usurio acabou de comear a rodar outro aplicativo ou est utilizando uma funo do dispositivo que prevenir seu aplicativo de continuar rodando. A maioria dos dispositivos mveis no possuem poder de processamento para estarem realmente "multitasking" (executando vrias funes ao mesmo tempo). Este mtodo provavelmente ser chamado com uma certa freqncia e deve-se manter em

18

mente que os recursos sendo utilizados pelo aplicativo devem ser liberados neste momento. Quando a aplicao volta rodar, o mtodo "startApp" ser chamado pelo gerenciador de aplicativos. A estrutura bsica para se construir uma aplicao J2ME pode ser vista na figura 14.

Figura 14: Estrutura bsica de um MIDlet. Fonte: Desktop possvel observar os trs mtodos bsicos para a criao de um MIDlet, j explicados anteriormente.

4.2 O MIDlet Ol Mundo Como todo programador descobrindo uma linguagem nova, os autores de livros sempre usam o tradicional exemplo Hello World , ou Ol Mundo em portugus. interessante aprender o mesmo programa em vrias linguagens diferentes, pois assim o usurio pode fazer uma comparao nos cdigos fonte e analisar em qual linguagem se gastou menos linhas, qual utilizou mais componentes, qual utilizou menos funes e outras coisas mais curiosas. Ser demonstrado aqui, ento, o programa Ol Mundo , que nada mais faz do que apresentar esta mensagem na tela do celular. importante dizer que o J2ME no tem um editor de cdigo. Foi usado neste trabalho o programa EditPlus 2. A figura 15 ilustra o cdigo fonte do programa.

19

Figura 15: Cdigo fonte do programa Ol Mundo. Fonte: Desktop.

Este exemplo estende ao aplicativo a classe base MIDP atravs da classe MIDlet e importa a javax.microedition.midlet e a javax.microedition.lcdui. Um inclui a classe base MIDIlet para o aplicativo, enquanto o outro garante os elementos da interface grfica, respectivamente. No mtodo startApp, o MIDlet adquire recursos e inicia a execuo. No pauseApp libera recursos e fica em hibernao (wait); no destroyApp libera recursos, finaliza threads e termina todas as atividades. Toda comunicao tem que acontecer em ambas direes, ou seja, ir e vir, para ser eficiente. O MIDlet oferece um conjunto de mtodos para comunicar-se com o gerenciador de aplicaes: NotifyDestroyed notifica ao gerenciador que a aplicao quer ser terminada. Ao chamar este mtodo, o resultado no ser a execuo do mtodo "destroyApp", ele deve ser chamado manualmente.

20

NotifyPaused notifica o gerenciador que a aplicao quer ser pausada. ResumeRequest solicita que o gerenciador volte a rodar a aplicao, se esta estiver pausada. GetAppProperty busca as informaes de configurao de uma aplicao.

Depois que o arquivo estiver compilado e pr-verificado (os packages criados ), chama-se o emulador, que simula o desempenho do celular, (procurar sempre utilizar o do modelo do celular real). Aparecer a execuo da aplicao em J2ME tal qual em um celular, e aps, envi-la para o celular. Recomenda-se sempre criptografar as informaes, os dados. O obfuscator oculta o cdigo e diminui seu tamanho; no consegue evitar a descompilao, mas d trabalho para algum entender e refazer o cdigo. No prximo captulo, sero mostrados diversos programas e seus respectivos cdigos para entender melhor a capacidade do J2ME em diversos aspectos, como jogos, wap, sons e vdeos.

21

5 PROGRAMAS E CDIGOS Como o intuito deste trabalho mostrar a plataforma J2ME utilizando o Wireless Toolkit, sero colocados em prtica alguns aplicativos que aproveitam da capacidade de um telefone celular e da plataforma J2ME Wireless Toolkit. Alguns programas so bem simples, como a calculadora e o jogo da cobrinha que todos conhecem. Outros so mais impressionantes, como programas que se conectam na Internet para obteno de dados.

5.1 Worm Game o tradicional jogo da cobrinha. Todos o conhecem mas talvez possam no ter idia da complexidade do cdigo fonte para se fazer uma aplicao sem muita utilidade prtica, porm bem divertida. O jogo constitudo por sete classes: WormScore: a classe que controla a pontuao do jogador. Worm: a classe que controla a cobra, sua direo e seus movimentos. WormException: classe que controla as mortes da cobra. Ao morrer, o jogo iniciado. WormFood: o item que a cobra vai comer. Ele posicionado em lugares alternados da tela. WormLink: classe responsvel por adicionar novas partes cobra. WormMain: classe principal do jogo. ela quem inicia o MIDlet. WormPit: classe responsvel pelo ambiente do jogo, sendo esse o espao fsico em que a cobra pode andar.

A seguir, teremos alguns cdigos. 5.1.1 A classe WormFood.

22

Figura 16: Classe WormFood. Fonte: Desktop.

23

Figura 17: Classe WormFood. Fonte: Desktop.

24

Figura 18: Classe WormFood. Fonte: Desktop.

Nas figuras 16, 17 e 18 mostrado a classe WormFood, que controla as aes da comida do personagem do jogo (no caso, a cobra). A comida aparece em um lugar qualquer da tela localizado pelas coordenadas X e Y na matriz. Caso a localizao da cobra coincida com a localizao da comida, quer dizer que o jogador conseguiu alcanar o item. Neste caso, a funo rodada novamente para que um novo item seja colocado na tela. Existem mais seis classes para tornar o aplicativo completo. Algumas tem mais linhas de cdigo do que a classe WormScore e outras tem menos. No sero mostradas todas aqui pois o objetivo deste trabalho no aprender a linguagem Java, e sim demonstrar o poder do J2ME.

5.2 Manipulao de imagens Os telefones celulares mais novos esto evoluindo tambm na questo do display, j que uma das propostas para o futuro a de receber streaming de udio e vdeo (som e imagem vindo da Web). Pela lgica, um celular que tem a capacidade de reproduzir vdeos tambm tem a capacidade de mostrar fotos. O J2ME Wireless Toolkit permite a insero de imagens e pequenas animaes (seqncia de arquivos PNG) em seus aplicativos. Tais imagens podem ser do tipo JPEG, JPEG preto e branco, JPEG progressivo e PNG. Na figura 19, temos o menu de demonstrao de imagens suportadas.

25

Figura 19: Tela de demonstrao de imagens. Fonte: Desktop.

O Flashing Lighthouse mostrado na figura x representa uma sobreposio de quadros utilizando duas figuras PNG. O efeito da torre emitindo uma luz a utilizao em loop destas duas imagens. interessante lembrar que um contador de quadros por segundo mostrado no canto inferior do display do celular. A mdia atingida com este exemplo foi de 5 quadros por segundo (FPS), um valor bom para uma imagem considerando-se o processador de um telefone celular. Por efeito de comparao, grficos vetoriais utilizados em games tm uma velocidade boa se atingirem 50 ou 60 quadros por segundo (FPS).

Figura 20: Flashing Lighthouse. Fonte: Desktop.

26

6 ESTUDO DE CASO Com o passar do tempo a tecnologia vem surpreendendo a todos, e isso no segredo. Observa-se que o impossvel quase sempre torna-se possvel, isso graas criatividade de quem faz um aplicativo. No s a tecnologia vem crescendo ultimamente como tambm a violncia, assaltos, roubos e outras coisas desagradveis ao ser humano, e com isso observa-se vrias solues sendo criadas para evitar tais transtornos. Mas e se fosse possvel criar algo til humanidade com o J2ME, seria interessante no mnimo, e estimulante para quem programa nele. Ser demonstrado aqui um cdigo bem interessante, onde com o qual uma pessoa pode monitorar um ambiente utilizando um telefone celular consigo, e uma webcam conectada a um servidor web.

6.1 Obtendo imagens de uma webcam em um telefone celular Com o Java 2 Micro Edition voc pode ver imagens geradas por uma cmera digital no seu celular wap. Ser detalhado agora o processo para obterse tal resultado. A captura de imagens dever ser feita por uma webcam, que repassa as fotos a um servidor web. O MIDP fornece uma API Java para construir aplicativos wireless que possam ser usados em telefones celulares, pagers, e PDAs que suportam MIDP. Um outro nome para aplicaes de MIDP so MIDlets. A seguir so mostrados alguns princpios que foram citados detalhadamente em captulos anteriores: Um MIDlet uma classe de Java que estende classe abstrata (javax.microedition.midlet.MIDlet). Primeiramente, um MIDlet que estende classe abstrata do MIDlet deve executar os seguintes mtodos: startApp() pauseApp(), e destroyApp(). Desde que todas as execues de MIDP suportem as imagens armazenadas no formato PNG, caso a webcam no suporte o salvamento de imagens neste formato de arquivo, o desenvolvedor dever converter as imagens capturadas para esse formato. Existem vrios programas que fazer isso no mercado. Todas as execues do MIDP devem fornecer suporte para o protocolo HTTP. Recomenda-se usar o HTTP, pois este permite que a aplicao seja portvel atravs de todos os dispositivos de informao mveis. A figura 21 mostra uma viso geral do esquema:

27

Figura 21: Esquema do funcionamento do sistema. Fonte: http://www.javaworld.com/javaworld/jw-05-2003/jw-0516-webcam.html? 6.1.1 Ajustando o ambiente Para a parte de desenvolvimento sero necessrios alguns programas: A plataforma J2SE. A plataforma J2ME. no Wireless Toolkit que o programa Java ser desenvolvido. O emulador tambm ser muito til na fase de testes, pois uma conexo wap atualmente muito cara. Uma webcam para captura de imagens. Normalmente todas as cmeras vm com um software para captura de imagens. Tal software tambm ser necessrio. Um editor de cdigo. Um servidor Web. 6.1.2 Parte do cdigo Quando a aplicao iniciada no telefone celular, a lista de possveis cmeras disponveis lida pelo arquivo Java Application Descriptor (JAD) chamando a funo setupImageList(): for (int n = 1; n < 100; n++) { String nthImage = "PhotoImage-"+ n; String image = getAppProperty(nthImage); if (image == null || image.length() == 0) break; String nthTitle = "PhotoTitle-" + n; String title = getAppProperty(nthTitle); if (title == null || title.length() == 0) title = image; imageNames.addElement(image); imageList.append(title, null); }

28

O arquivo JAD verifica se existe uma verso atualizada do MIDlet no servidor, necessria para rodar a aplicao antes de inicia-la. Tal arquivo tambm permite que se adicionem novas cmeras aplicao sem que o cdigo fonte tenha que ser alterado. A funo setupImageList() faz um loop procurando por novas cmeras disponveis no arquivo JAD. A lista armazenada na varivel imageList. Ao escolher a cmera desejada, o processo inicia. O mtodo run() mostra uma barra de progresso indicando o quanto da imagem j foi baixado. A aplicao indica um alerta caso ocorra uma falta de memria para armazenar o arquivo de imagem. Se nenhuma imagem encontrada, outro alerta mostrado. O mtodo createImage() cria uma conexo para o servidor web. c = (HttpConnection)Connector.open(name); O aplicativo confirma se a imagem realmente um arquivo PNG. Caso contrrio, a seguinte mensagem de erro mostrada: if (!type.equals("image/png")) { throw new IOException("Expecting a PNG image, but received " + type); } O mtodo DataInputStream l a imagem atravs da conexo do HTTP: is = c.openDataInputStream(); byte[] data = new byte[len]; is.readFully(data); return Image.createImage(data, 0, len); A classe PhotoFrame faz uma quantidade justa de trabalho aqui. Ela responsvel por trazer a imagem at o display do aparelho. this.images = images; if (images.size() > 0) { Image image = (Image)images.elementAt(0); imageWidth = image.getWidth(); imageHeight = image.getHeight(); } else { imageWidth = 0; imageHeight = 0; } index = 0; imageX = (getWidth() - imageWidth) / 2; imageY = (getHeight() - imageHeight) / 2; genFrame(style, imageX, imageY, imageWidth, imageHeight); . . .

29

g.drawImage((Image)images.elementAt(index), imageX, imageY, Graphics.LEFT|Graphics.TOP); 6.1.3 Mais webcams Este exemplo tem a funo de ver imagens de trs cmeras distintas. Se quiser adicionar mais cmeras, basta modificar o arquivo getimage.jad. A maneira mais fcil fazer isto atravs do Wireless Toolkit: Inicie o Ktoolbar. Clique em Settings. Escolha a aba User Defined. Clique em Add e escreva em property name: PhotoImage-3. Para o campo valor, digite o local onde o software de captura de imagens da webcam est salvando os arquivos. Clique em Add e entre com o seguinte valor no campo property name: PhotoTitle-3. Para o valor, digite o nome do ambiente que a webcam est monitorando (ex: entrada do prdio). Clique em Run. Modifique o arquivo JAD para ir direto aos arquivos capturados pela webcam, apontando o local onde o servidor web est salvando as imagens (ex: http://127.0.0.1:8080/imagemEntPredio.png)

30

7 CONCLUSO J um fato de que um telefone celular nos dias de hoje no nenhum artigo de luxo. Antigamente pagava-se caro para obter e manter um objeto destes, mas hoje em dia, numa residncia onde moram quatro pessoas e que possui uma linha telefnica fixa, estima-se que no mnimo trs destes moradores possuem telefone celular, ou seja, o nmero de telefones portteis j superaram o nmero dos telefones residenciais. interessante pensar nisso como um incentivo programao Java, pois num mercado to grande onde todas as pessoas fazem parte, cada dia que passa os telefones esto agregando mais funes alm da bsica, que a conversao. Exitem aparelhos que tocam msica, gravam sons, exibem vdeos, tiram fotos como cmeras, comunicam-se de alguma forma com um automvel e assim vo evoluindo. Tais fatos mostram que a criatividade dos programadores no tem limite, descaracterizando at a funo principal do aparelho. Nota-se tambm que a necessidade de fabricar novos telefones, com mais recursos, aparecem com essas novas funcionalidades. Tempos atrs a tendncia era de reduzir o display dos aparelhos, para se tornarem mais compactos. Era uma mania a seguir. Mas atualmente, nota-se que o display est voltando ao seu tamanho anterior e o telefone est crescendo de novo. Aquela forma compacta j no suporta mais as necessidades dos programadores, j que todo telefone tem que ter cmera embutida para fazer sucesso no mercado. Isto foi um exemplo mostrando como o poder do programador afeta at as caractersticas externas do aparelho. A linguagem Java e o J2ME tambm deram oportunidade de pessoas ligadas a jogos trabalharem com o que gostam, pois o mercado de games de consoles e conseqentemente o de celulares esto crescendo, igualando-se ao de cinema em questes de lucro. Pessoas fascinadas por jogos j podem criar os seus prprios utilizando a plataforma J2ME, isso com um pouco de estudo e dedicao. Programadores para esse tipo de aparelhos ainda so poucos comparando-se aos games voltados aos computadores e consoles. Esta mais uma oportunidade a todos que desejam aventurar-se com o J2ME. Este trabalho teve por finalidade mostrar algumas caractersticas da plataforma Java 2 Micro Edition, sendo que muito ainda h a se aprender. O projeto mostrado aqui pode incentivar pessoas que queiram entrar neste mercado, pois com um pouco tem criatividade e muito estudo, novas idias e invenes nascero e certamente serviro de exemplo para futuros trabalhos. Tal projeto pode ser aprimorado e melhorado, futuramente os gastos com conexo com a Internet sero mais baixos e os telefones mais poderosos sero mais acessveis, e quem sabe ento ao invs de termos fotos no display, no teremos vdeo em tempo real...

31

8 REFERNCIAS BIBLIOGRFICAS TOPLEY, Kim. J2ME In a Nutshell. Maro/2002. Disponvel em http://www.comp.pucpcaldas.br/users/marcio.lapidusas/j2me.pdf - Acesso em 10/09/2004. CARNIEL, Juliano. TEIXEIRA, Clvis. Apostila de J2ME. 2003. Disponvel em http://www.comp.pucpcaldas.br/users/marcio.lapidusas/Tutorial_J2ME.pdf Acesso em 10/09/2004. CORBERA, Rodrigo P. Garcia. Tutorial de programao J2ME. 2003. Disponvel em http://www.comp.pucpcaldas.br/~al550262133/J2ME.zip Acesso em 10/09/2004. COSTA, Raimundo da. LINO, Franklin. CORREA, Olavo. LIMA, Elias Rodrigues de. Utilizao da Tecnologia J2ME no Desenvolvimento de Aplicativos para Celulares e PDAs (Personal Digital Assistant). So Paulo/2003. Disponvel em http://www.comp.pucpcaldas.br/users/marcio.lapidusas/j2me_.zip - Acesso em 10/09/2004. ALBUQUERQUE, Mrcio. YBANEZ, Murilo. Curso de J2ME. 2003. Disponvel em http://www.comp.pucpcaldas.br/~al550262133/j2me1.pdf - Acesso em 10/09/2004.

You might also like