Desenvolvendo Em J2me



DESENVOLVENDO EM J2ME: afinando com o celular

Centro Federal de Educação Tecnológica da Paraíba

André Nobre Vinagre; David Henrique de Moura Viana

([email protected]; [email protected])

Orientador: Ricardo Roberto de Lima

Co-Oreintador: Marileuza Fernandes

Resumo

Este trabalho procura apresentar, de forma informativa, o ambiente J2ME, da plataforma Java, desenvolvido pela Sun Microsystem, a fim de expor um pouco do que se trata tal ambiente e por qual motivo pode-se considerar a utilização de tal ambiente para o desenvolvimento para micro dispositivos, principalmente aparelhos celulares, considerando que o mundo tecnológico avança de forma grandiosa, que os processadores dos aparelhos celulares aumentam consideravelmente e que o homem demonstra cada vez mais a necessidade de estar sempre informado a qualquer momento e em qualquer local. Na primeira, discutimos a definição do J2ME; na segunda os motivos de optar por este ambiente; na terceira aprofundamos um pouco mais no ambiente, visando abrir as fronteiras desse mundo tecnológico; na quarta olhamos um pouco do que o J2ME oferece para o desenvolver de aplicações multimídias; na quinta seção apresentamos o afinador de violão inicialmente proposto para ajudar, graças as facilidades que a tecnologia J2ME disponibiliza, aquelas pessoas que têm um violão precisando-se ser afinado e não tem o conhecimento de como fazer isto; na última seção apresentamos alguns comentários gerais do trabalho.

Abstract

This work looks for to present, of informative form, environment J2ME, of the Java platform, developed for the Sun Microsystem, in order to display a little of what such environment is treated and for which reason can be considered the use of such environment for the development for micro devices, mainly cellular devices, considering that the technological world advances of huge form, that the processors of the cellular devices increase considerally and that the man demonstrates to each time the necessity more to be always informed at any time and in any place. In the first one, we argue the definition of the J2ME, in the second reasons to opt to this environment, third we more deepen a little in the environment, aiming at to open the borders of this technological world, in fourth we look at a little of what the J2ME offers to develop it of applications multimedia, in the fifth section we present the guitarpad initially considered to help, favours the easinesses that technology J2ME offers, those people who have a guitar needing itself to be improved best sound and does not have the knowledge of as to make this; in the last section we present some general commentaries of the work.

Introdução

Olhando-se o mundo que nos rodeia, podemos perceber cada vez mais o avanço tecnológico e as mudanças que os diversos tipos de dispositivos vêm sofrendo, visto que o ser humano passou a ter a tecnologia como uma necessidade e não mais apenas como uma novidade na sua vida, necessitando assim, ter acesso na hora que precisar e no local em que estiver.

Aproveitando o alto poder dos micro dispositivos, tais quais o celular, muitas empresas do ramo de desenvolvimento vêm olhando com bons olhos, associado ao poder da linguagem Java, considerando o paradigma WORA (Write Once, Run Anywhere ou escreva uma vez e rode em qualquer lugar) e considerando ainda que com a grande demanda para o desenvolvimento de novas aplicações e cada vez mais complexas, os fabricantes dos aparelhos deixaram de ser os únicos responsáveis pela produção dos aplicativos de tais aparelhos, sendo assim tiveram que encontrar um meio de permitir que outras empresas pudessem desenvolver essas aplicações, mas havia um problema na parte da distribuição de tais informações, pois não seria bom para essas empresas que outras tivessem acesso ao sigilo de soluções proprietárias. Então, se fez necessário o desenvolvimento de uma camada entre os sistemas operacionais de seus aparelhos e as aplicações.

Um tipo de camada desenvolvido pela Sun Microsystem, uma grande empresa do ramo do desenvolvimento, seria o ambiente J2ME, da plataforma Java.

Este artigo tem como objetivo, procurar informar até onde o desenvolvimento de aplicativo para celular pode contribuir no mundo tecnológico através de facilidades e até onde ele pode acompanhar o avanço da tecnologia. Pretende-se desenvolver um afinador de violão instalado no celular e para tanto, nossa pesquisa baseou-se em referências bibliográficas e documentais.

Mergulhando no J2ME

Sabendo-se que a linguagem de programação Java é de uso arbitrário, livre e desafiante, além de considerar que possui um nível tecnológico abrangente, moderno e cheio de recursos e que ela ainda é a linguagem mais portável existente, que utiliza o velho e atual paradigma de orientação a objetos de uma forma consistente, deixando-a com manutenibilidade, ou seja, de fácil reconhecimento quanto ao esforço necessário para que se modifique o software; com escalabilidade, ou seja, capaz de suportar o aumento no número de usuário sem que o tempo de resposta da aplicação cresça de uma forma exponencial; e com uma fácil reutilização do código, o ambiente de desenvolvimento da Java para dispositivos móveis ou portáteis, tais quais telefones celulares, palmtops, smart cards, enfim, aparelhos de pequeno porte, é o J2ME, que significa Java 2 Micro Edition. Segundo aSun Microsystem

Java™ Platform, Micro Edition (Java ME) is the most ubiquitous application platform for mobile devices across the globe. It provides a robust, flexible environment for applications running on a broad range of other embedded devices, such as mobile phones, PDAs, TV set-top boxes, and printers. The Java ME platform includes flexible user interfaces, a robust security model, a broad range of built-in network protocols, and extensive support for networked and offline applications that can be downloaded dynamically. Applications based on Java ME software are portable across a wide range of devices, yet leveraging each device's native capabilities.
The Java ME platform is deployed on billions of devices, supported by leading tool vendors, and used by companies worldwide. In short, it is the platform of choice for today's consumer and embedded devices.[1]

O ambiente J2ME é um agrupamento de APIs (Application Program Interface) com o objetivo de dar suporte as MIDlets, que são aplicações que são codificadas e compiladas em computadores comuns e só depois que são transferidos para os dispositivos móveis que irão executá-las. O conjunto dos principais componente da plataforma J2ME é: o CDC (Connected Device Configurations/Configurações para Dispositivos Conectados), o CLDC (Connected Limited Device Configurations/Configurações para Dispositivos com Conexão Limitada), o MIDP (Mobile Information Device Profiles, Perfis de Informações de Dispositivos Móveis), além de muitas outras ferramentas e tecnologias que levam as soluções Java aos mercados de consumo e de dispositivos integrados.

Uma configuração define uma plataforma Java para uma faixa de equipamentos e sua JVM (Java Virtual Machine/Máquina Virtual Java) respectiva. O componente CDC é a configuração que permite desenvolver aplicativos para dispositivos que possuem mais memória, processamentos mais rápidos e uma banda larga de rede maior, tais quais PDA's mais desenvolvidos, televisores com recursos de rede e sistemas computadorizados para veículo; é destinada para dispositivos com no mínimo 512KB de memória ROM, 256KB de memória RAM e algum tipo de conexão. Já o CLDC é a configuração menor dentre as duas existentes, permitindo o desenvolvimento para dispositivos com conexões de redes temporárias, um processador lento e com memória limitada, tais quais pagers, celulares e PDA's; tais dispositivos têm que possuir entre 128 e 512KB de memória ROM e 32KB de memória RAM, mais interface de conexão de rede.

Além disso, já que a cada dia os dispositivos se desenvolvem mais e mais,esses tipos de configurações apenas, não foram mais suficientes, precisando-se de um algo mais, e esse algo mais é justamente o que podemos chamar de perfil. O perfil é bem mais específico que as configurações, sendo traduzidos em bibliotecas de classes voltadas ao desenvolvimento de aplicações para um dispositivo em particular. Um grande exemplo desse e, comumente encontrado, é o MIDP, utilizado e voltado para a CLDC, que consiste em uma série de API's não existentes antes no padrão da CLDC, visando a interface com o usuário, armazenamento persistente, suporte à rede e temporização.

Algo ainda importante é a diferente especificação da máquina virtual quando se trata da configuração CLDC, já que a CDC tem a mesma da J2SE (Java 2 Standard Edition/ Java 2 Edição Padrão), que é o ambiente de desenvolvimento padrão da Java. Tal especificação é o KVM, uma máquina virtual semelhante a JVM, visto que é o mecanismo que executa os aplicativos e mini-aplicativos desenvolvidos, sendo compacta e que é utilizada em dispositivos pequenos, ou seja, com memória e potência de processamento limitadas. Baseando-se na preciosidade da memória em dispositivos pequenos de recursos restritose sabendo que a base de tempo de execução é de apenas aproximadamente 60 kilobytes, se diz que o 'K' da sigla KVM quer dizer kilobyte, sugerindo que ela executará apenas algumas dezenas dekilobytes da memória ao contrário dos megabytes.

Optando por esse mundo

Um grande desejo seria ter a API J2SE num micro dispositivo, mas isso é fora da realidade. Para tratar das necessidades especiais de tais tipos de dispositivos que estão fora da abrangência do J2EE e do J2SE, foi introduzida a "Micro Edition", a J2ME.

Considerando-se que o J2ME se destina ao desenvolvimento para micro dispositivos, que esses têm um poder limitado e ainda que muitos deles não possuem opção de download e software de instalação, exceto aquele que já foi previamente configurado na sua fabricação, podemos considerar vários pontos do porquê desenvolver em J2ME. Dentre essas, atualmente, ela é a tecnologia que alcança o maior número de tais dispositivos disponíveis no mundo, fazendo com que os dispositivos que antes possuíam uma natureza estática, transformem-na.

A implementação J2ME é gratuita para download e para uso comercial, tornando o custo do desenvolvimento baixo e fazendo com que a comunidade de usuários aumente. Similar a um navegador web, um dispositivo dotado de tal implementação, tem a capacidade de navegar, fazer download e instalar aplicativos Java e conteúdo.

Graças ao vasto conhecimento da linguagem Java, tornou-se uma fácil adaptação ao J2ME. Com a introdução dessa linguagem para tais dispositivos, podemos ter acesso aos recursos de linguagem e da plataforma Java. Tais recursos são a facilidade no domínio da programação nessa linguagem, um ambiente em tempo de execução que fornece uma plataforma segura e portável e acesso a conteúdo de forma dinâmica.

Ela ainda nos possibilita adicionar ou remover funcionalidades nos dispositivos e ainda, que qualquer pessoa possa baixar e atualizar seus aplicativos ou jogos via OTA (Over The Air), ou seja, de uma forma geral, a especificação do mesmo define que os dispositivos devem fornecer uma forma para o utilizador descobrir MIDlets que possam ser instaladas.

Segundo Eric Chu, diretor de negócios e marketing de J2ME na Sun,

Java é 'smart' ("inteligente") como indica o nome dos smartphones. Se observarmos a maioria dos telefones celulares (sem J2ME), parecem ser dispositivos relativamente simples. Eles não fazem computação nem executam aplicações e não armazenam dados nem interatuam com a rede de acordo com o modelo cliente-servidor.[2]

Sanjay Gupta, gerente sênior de padrões globais na Motorola destaca que "J2ME esconde o sistema operacional adjacente (em um dispositivo) e permite que um programa Java opere em qualquer telefone sem fio, seja Linux ou Windows CE ou uma plataforma proprietária, seja qual for, a experiência do usuário será igual."[3]

Colocando para funcionar

Como parte deste projeto, para entendermos o desenvolvimento do afinador de violão isntalado no celular, que é, antes de tudo, um aplicativo para um micro dispositivo, precisamos entender tudo que é preciso para desenvolver tal aplicativo.

Inicialmente, vamos tratar de como fazemos para instalar o aplicativo no dispositivo, especificamente no celular. Temos que ter uma noção do dispositivo que o software vai ser instalado, no nosso caso, esse dispositivo é o celular, pois existem alguns aparelhos que têm acesso à internet e conseqüentemente recebem o aplicativo através dessa, nesse caso, via WAP (Wireless Application Protocol/Protocolo de Aplicações Sem Fio), ou seja, esse meio tem a finalidade de oferecer serviços e conteúdos de Internet através de conexões sem fio, mas para isso, é preciso que se tenha disponibilizado em algum servidor WEB, os arquivos .JAD e .JAR.

O arquivo .JAR (Java Archive) é praticamente o executável do projeto, é o que realmente é instalado no dispositivo para que a aplicação funcione. Ele traz as vantagens de compactação, segurança e distribuição das aplicações. Ele esconde o código do aplicativo, ou seja, sua implementação, e roda o programa sozinho. A principal vantagem do arquivo .JAR é que ele é portável, como toda a linguagem Java e isso implica que qualquer pessoa pode criar um arquivo executável (.JAR) que vai funcionar em qualquer sistema operacional, sem ela ter que modificar nada, nem mesmo uma linha ou virgula.

De acordo com a pesquisa de um grupo de alunos da UNICAP do período 2006.1,

A distribuição de um aplicativo empacotado para produção geralmente consistirá em muitos arquivos. Além das classes Java, outros arquivos, como imagens e de dados de aplicativo, conhecidos como recursos, são bastante comuns. Se empacota todas essas informações em uma única entidade conhecida como JAR. Além dos arquivos de classe e recurso, um JAR contém um arquivo conhecido como manifesto. Esse arquivo descreve o conteúdo do JAR. O arquivo de manifesto tem o nome de manifest.mf e é armazenado como parte

do próprio arquivo JAR.[4]

Já o arquivo .JAD (Java Application Descriptor) é basicamente um arquivo que contém o caminho para o executável, ou seja, a URL de onde o arquivo .JAR se encontra. Eles são muito úteis quando se trata de transferência de aplicativos via OTA, pois o gerenciador de arquivos do celular vai verificar nesse tipo de arquivo qual o tamanho do arquivo .JAR e se o dispositivo dispõe de capacidade de suportar esse último arquivo. Considerando o tamanho do arquivo .JAD, que é de aproximadamente 1Kb, é mais rápido e viável essa verificação no descritor do que no executável.

Também de acordo com a pesquisa do mesmo grupo de alunos da UNICAP do período 2006.1,

[...] um arquivo JAD deve estar disponível como parte do conjunto de MIDlets para fornecer informações sobre o (s) MIDlets dentro do arquivo JAR. O raciocínio por trás da inclusão de um arquivo JAD é o seguinte: " Fornecer informações para o gerenciador de aplicativos sobre conteúdo de um arquivo JAR. Com essas informações, podem ser tomadas decisões quanto a um ou mais MIDlet serem convenientes para executar no dispositivo. " Fornecer um meio para que parâmetros sejam passados para um ou mais MIDlets, sem ter de fazer alterações no arquivo JAR. O gerenciador de aplicativos exige que o arquivo JAD tenha a extensão .jad.[5]

No J2ME existem alguns pacotes opcionais, dentre eles o que nós precisaremos para desenvolver o nosso aplicativo, o JSR-135: MMAPI - Mobile Media API. Pacotes opcionais são bibliotecas de programação específicas a uma determinada tecnologia e que aumentam as capacidades do ambiente Java, caso estejam implementadas no dispositivo. Estes pacotes são chamados opcionais porque, mesmo que não estejam implementados num determinado dispositivo, esse continua a ser considerado um dispositivo J2ME. Eles provêem funcionalidades que podem não estar associadas com uma configuração específica ou com um perfil, visto que um dispositivo que atende a um perfil, deve atender a todo ele.

O conjunto de classes definido pelo perfil MIDP aumenta os requisitos de quantidade de recursos disponíveis nos dispositivos determinados pela configuração CLDC. O conjunto de bibliotecas do MIDP deve fornecer suporte ao desenvolvimento de aplicações, endereçando diversos aspectos, entre eles a gerência de sons, transações seguras, interface com o usuário, sistema de armazenamento persistente, além de outros. Apesar de especificar uma API bem mais rica em relação à configuração CLDC, que fornece apenas recursos de base, o perfil MIDP procura não endereçar aspectos específicos de hardware para que possa ser compatível com uma maior diversidade de produtos. Bibliotecas de sistema e funções de baixo nível estão fora do escopo.

O MIDP 2.0 é a versão atualizada da 1.0, mais completa e oferece compatibilidade com essa versão anterior. Na versão 2.0, o mecanismo de distribuição OTA deixou de ser recomendação como na versão anterior para se tornar uma obrigação. Ainda com esta nova versão, se tornou possível a geração e reprodução de áudio e a reprodução de vídeo graças a bibliotecas multimídias que foram adicionadas. Fazer uma simples geração ou reprodução de som na versão 1.0 era algo impossível. Pode-se perceber ainda que a API gráfica foi estendida, disponibilizando funções direcionadas para jogos, além ainda do esquema de segurança que foi aumentado na nova versão.

Vida de um aplicativo

Olhando-se para o nosso aplicativo, podemos perceber que a plataforma J2ME estende a esse a classe base MIDP através da classe MIDlet e inicialmente importa dois namespaces: javax.microedition.midlet e javax.microedition.lcdui. Namespace é um agrupamento lógico de funcionalidades. Ele organiza um conjunto de classes quepodem fazer diversas coisas como, por exemplo, manipulação de arquivos, segurança e etc. O primeiro namespace citado anteriormente, inclui a classe base MIDlet para o nosso aplicativo, enquanto o segundo, provê a interface gráfica, a GUI (Graphical User Interface).

Existe um ciclo de vida padrão para uma MIDlet qualquer e esse reflete-se nos métodos e comportamento da classe MIDlet. Essa classe provê três métodos abstratos que são usados pela aplicação, o startApp(), o pauseApp() e o destroyApp(). Podemos encontrar um método para cada mudança de estado de seu aplicativo e esses métodos devem ser implementados sempre na classe principal de seu aplicativo, pois essa classe deverá estender a classe MIDlet. Esses são chamados à partir do gerenciador de aplicativos do dispositivo, e é utilizado para comunicar com os aplicativos que estão rodando.

O método startApp() é sempre chamado depois do construtor e sempre utilizado para mudar o estado de inativo para ativo, ou seja, quando o aplicativo torna-se visível. Isso implica que o chamado desse método não é feito apenas quando o aplicativo é iniciado, por isso, é recomendável evitar colocar códigos de inicialização que só possa ser rodado uma única vez. É recomendável colocar esses tipos de códigos no construtor.

Já o método pauseApp() é um tanto quanto confuso seu entendimento à priori. Ele é utilizado para comunicar ao aplicativo em uso, que este está prestes a ser pausado, ou seja, o usuário acabou de iniciar um outro aplicativo ou está utilizando alguma outra funcionalidade do dispositivo que impede a utilização do seu aplicativo. Considerando que o poder de processamento é baixo nos dispositivos móveis não podendo estar executando várias funções ao mesmo tempo, é provável que esse método seja chamado com freqüência.

E por fim, o método destroyApp() é chamado pelo gerenciador de aplicativos para informar que a aplicação está prestes a ser encerrada. Ao contrário do método startApp(), esse não será executado várias vezes, por isso, é recomendável a utilização de alguma espécie de código de limpeza na implementação de tal método, isso porque a MIDP não inclui em sua funcionalidade a capacidade de finalizar seus objetos, sendo nós os responsáveis por isso, através de tal implementação para limpeza. Por considerar que um dispositivo móvel é bem menos estável que uma plataforma típica de desenvolvimento e que a qualquer momento pode ser desligado e/ou reiniciado pelo usuário, não podemos contar que o método será executado todas as vezes.

Segundo Enrico Fonseca, Gerente de Projetos da Dash Technologies, técnico em Processamento de Dados e Bacharelando em Ciência da Computação pela Universidade Gama Filho (UGF),

Uma aplicação MIDP (Mobile Information Device Profile) pode receber o nome de MIDlet. O MIDlet é similar a um Applet, pois tem um ciclo de vida em estados que são representados como métodos. O startApp() é a execução do MIDlet, pauseApp() é executado quando se está em espera e destroyApp boolean uncondition) que verifica a finalização. [6]

Resumidamente, assim que o usuário começar a rodar o afinador no celular, este aplicativo chamará o método startApp() para mudar o estado de inativo para ativo. Supondo-se que com o aplicativo ativo o usuário receba uma ligação, o que ocorre é que, o método pauseApp() é chamado para que o estado do aplicativo seja alterado para interrompido e assim que essa ação for concretizada, o método notifyPaused() é chamado. Este tem a função de fazer com que o MIDlet pause a si mesmo. Prosseguindo, após finalizar a ligação, o usuário poderá retornar a aplicação que estava interrompida. Nesse momento o método startApp() modifica o estado para ativo, que encontrava-se em interrompido. Após a troca de estado, o método resumeRequest() é chamado. A função deste método é fazer com que a MIDlet em pausa possa dar sinal de que quer entrar em estado ativo. Por fim, quando o usuário deseja encerrar a aplicação, o método destroyApp() é chamado, modificando o estado para destruído e quando isso acontece, o método notifyDestroyed() é invocado, este método fala ao gerenciador que a sua aplicação quer ser terminada.

Quando ocorre algum tipo de problema na transição entre estados, a exceção Exception MIDletStateChangeException é lançada, com isso, o estado do aplicativo é imediatamente alterado para destruído.

Por dentro do aplicativo

O aplicativo proposto e desenvolvido por nós, tem a funcionalidade de emitir os sons das cordas de um violão quando pressionadas as teclas do celular, para que assim, auxilie o processo de afinação do violão. Para isso, utilizamos a tecnologia J2ME de forma que nosso trabalho fosse auxiliado pelas facilidades e funcionalidades pré-existentes em tal tecnologia. Utilizamos então uma classe que estende da classe Canvas para dimensionamento e pintura da tela, além disso, tal classe permite aos programadores que a utilizam, lidar com eventos de teclas. Tais eventos estão relacionados a códigos constantes de teclas e estão mapeados internamente em teclas concretas. Utilizando tal classe, o método paint() tem que, obrigatoriamente, estar implementado. Este método recebe como parâmetro um objeto Graphics. Graphics é a classe que permite representar formas geométricas simples de duas dimensões (2D), permitindo desenhar texto, linhas, imagens, retângulos e arcos.

Após desenharmos na tela o aplicativo, a funcionalidade é implementada de tal forma que a tecla de número 1 seja pressionada, e o som referente à corda de número 1 do violão seja emitido e assim, analogamente, até a corda de número 6. Para tal, utilizamos os eventos de teclas.

Como dito anteriormente, existem códigos de teclas constantes, ou seja, cada tecla do dispositivo possui um código referente a ela. Esses são utilizados quando, por ventura, a aplicação recebe eventos de teclas pressionadas ou liberadas. Existem ao todo 12 códigos pré-definidos, dos quais utilizamos: KEY_NUM1, KEY_NUM2, KEY_NUM3, KEY_NUM4, KEY_NUM5, KEY_NUM6.

O objeto Canvas nos disponibiliza uma série de métodos à implementação que nos permite ser notificados dos eventos que acontecem. Existem cinco métodos para se trabalhar com evento de tecla. Utilizamos um desses que foi o keyPressed(). Esse é um método vazio por padrão e o parâmetro recebido é um valor inteiro, ou melhor, é o keyCode, ou seja, os valores constantes das teclas do celular.

Ainda provendo da facilidade do J2ME, utilizamos uma das funções mais básicas da MMAPI, que é a geração de um tom. Esse é caracterizado pela nota, duração e volume, ou seja, a nota MIDI a ser tocada, a duração (em milisegundos), da nota e o volume da mesma, o qual varia de 0 a 100, onde 0 é o silêncio e 100 o volume mais alto. Para gerar um tom facilmente, podemos invocar o método static void playTone(int note, int duration, int volume), onde os parâmetros são justamente a nota, a duração e o volume como já nos referenciamos. Esse método está definido na classe javax.microedition.media.Manager. Portanto, nossa implementação, falando-se "algoritcamente", foi o seguinte: caso a tecla seja a de número 1, gere o tom associado a corda de número 1 do violão e assim analogamente às outras cordas.

O afinador provavelmente, se não solucionar, ao menos ajudará, aquelas pessoas que necessitam de um auxílio na hora de afinar o violão. Já que a quantidade de celulares nos bolsos, nas mãos, nas orelhas e na frente dos seres humanos aumenta a cada dia, não seria compreensível, não aproveitarmos isso para tentarmos carregar o máximo de aplicativos com diversas funcionalidades num dispositivo móvel.

Considerações finais

Sabendo-se que o mundo dá espaços ao mundo J2ME, pois cada vez mais clama por maior potência e menor tamanho em aparelhos que possam ajudá-los para o que almejarem, um afinador de tom sendo carregado dentro do celular é algo que poderá facilitar muito, principalmente para quem depende da música em suas vidas.

Arrojado, seguro, portável e robusto, a plataforma J2ME promete dominar. Vários aplicativos ainda virão por ser desenvolvidos. Cantaremos mais afinados, graças às facilidades do J2ME.

Referências bibliográficas

[CARDOSO07]CARDOSO, Jorge. Java para Telemóveis– disponível em: <http://livromidp.jorgecardoso.eu/html/index.html> Acesso em: 28 de abril de 2007.

[CRESTE07]CRESTE, Guilherme. Artigo - Introdução ao Java Micro Edition – disponível em: <http://www.devmedia.com.br/articles/viewcomp.asp?comp=3857&hl=> Acesso em: 12 de janeiro de 2007.

[SDN07]SDN - Sun Developer Network – disponível em: <http://java.sun.com/javame> Acesso em: 17 de fevereiro de 2007.

[MICROJAVA07]Micro Java Network - disponível em:

<http://www.microjava.com/>Acesso em: 25 de fevereiro de 2007.

[FERRAZ07]FERRAZ, Felipe; WELLINGTON, José; TORRES, José; LEMOS, Vamberto. Seminário de J2ME do Departamento de Informática da UNICAMP – disponível em: <http://www.dei.unicap.br/~almir/seminarios/2006.1/ns06/J2ME/> Acesso em: 9 de março de 2007.




Autor: David Henrique


Artigos Relacionados


A Evolução Da Telefonia Celular

O Século Xxi

Método Simplex

Facebook Sdk (preview)

Trinômio Cidadania, Estado E Meio-ambiente

Nos Palcos Da Vida

Locação De Imóveis E O Direito Constitucional