ERISVALDO GADELHA SARAIVA JÚNIOR
Tecnólogo em Sistemas para Internet pelo IFPB
Graduando em Ciência da Computação pela UFPB
Pesquisador do LabTEVE (Laboratório de Tecnologias para o Ensino Virtual e Estatística)
E-mail: erisvaldojunior@gmail.com
Site: http://erisvaldojunior.com
Twitter: http://twitter.com/erisvaldojunior
Objetivo                           ROTEIRO
                              A plataforma J2ME
Desenvolver aplicações para
dispositivos        móveis
considerando fatores como     Exemplos Práticos
portabilidade,   uso     de
memória e processamento.      Interface X Portabilidade


                              Web / Pacotes Opcionais


                              Próximos Passos
Visão geral da plataforma Java




                 [SUN, 2008]
Configurações do JavaME




   CLDC 1.0 / CLDC 1.1
Perfis do CLDC


• Trata-se da especificação     • Revisão da especificação
original (JSR 37);              original (JSR 118);

•Provê o núcleo necessário
                                • Componentes          de
para aplicações móveis,
como componentes básicos        interface   aprimorados,
de interface e conexão de       HTTPS, suporte a jogos e
rede.                           aplicações multimídia.


                     MIDP 2 .1 . . . MIDP 3.0*
O que vamos usar
                       Possíveis pacotes opcionais

                       • Mobile   Media API
                       (MMAPI) – JSR 135;
                       • Wireless   Messaging
                       API (WMA) – JSR 205;
•É  o "padrão     de
                       •File       Connection
mercado" atual.        Optional       Package
                       (FCOP) – JSR 75.
Ciclo de vida de uma aplicação JavaME




               [FONSECA, 2005]
Estrutura básica de classes




                [FONSECA, 2005]
Estrutura expandida de classes




     Comum a todas as versões do MIDP   MIDP 2.0 ou superior
Expandindo mais ainda...
Muita hora nessa calma...

                                • Os     Commands        são
• Apesar     da      grande     essenciais.   Você     pode
quantidade de classes, elas     adicionar Commands em
são de muito fácil uso. Em      qualquer tela. Eles regem a
geral, basta apenas chamar      navegação da sua aplicação.
o construtor da classe, setar   Basta     implementar      o
alguns métodos e depois         método commandAction()
informar ao Display para        da                 interface
mostrá-la na tela;              CommandListener.
Persistência de Dados
• Através do RMS (Record   • Possui          recursos
Management Store), um      interessantes,       como
esquema             de     navegar pelos registros
armazenamento bastante     através        de      um
                           RecordEnumeration,
simples do JavaME;
                           filtrando-os da maneira
• Uma    aplicação pode    que achar conveniente
acessar múltiplos Record   (RecordFilter)           e
Stores e cada um poder     ordenando-os      também
ter N registros.           como                quiser
                           (RecordComparator).
Persistência de Dados




         Forma de armazenamento dos Record Stores
Tecnologias utilizadas


                         • Mobility
                           •Game Builder(Não)

                           •Visual Mobile
                           Designer (Não, é a
                           baba é?)
NetBeans 6.5 (Full ou Mobility)
•Suporte completo a plataforma
JavaME;


•Ferramenta RAD para navegação
de telas com o Visual Mobile
Designer;


•Ferramenta RAD para o design
dos jogos com o Game Builder.
Emuladores
             Sun Java Wireless
               Toolkit (JWT)


             Nokia S40/S60 SDK




               MotoDEV SDK
Emuladores
             Sun Java Wireless
               Toolkit (JWT)


             Nokia S40/S60 SDK




               MotoDEV SDK
Exemplo 1:
Olá Mundo!
Exemplo 2: FuelMIDlet (Parte 1/3)
Exemplo 2: FuelMIDlet (Parte 2/3)
Exemplo 2: FuelMIDlet (Parte 3/3)
Exemplo 3: PhoneBookMIDlet (Parte 1/3)
Exemplo 3:
PhoneBook
MIDlet
(Parte 2/3)
Exemplo 3: PhoneBookMIDlet (Parte 3/3)
Mas esses exemplos estão muito feios...

•Vamos melhorá-los!


•SplashScreen herdando de Canvas;


•Uso                                de
RecordFilter/RecordComparator       no
Exemplo 3;


•Trocar os componentes de alto nível
(Alert, Form, List) por telas de baixo
nível herdando de Canvas.
Exemplo 3: NameComparator
Exemplo 3: NameFilter
Principais classes do JavaME




     Comum a todas as versões do MIDP   MIDP 2.0 ou superior
ClasseCanvas
• Classe abstrata que deve   • As     classes   que
ser especializada para a
confecção de uma tela em
                             herdam de Canvas
baixo nível;                 podem implementar
• As classes que herdam      o               método
de                Canvas     keyPressed(),      que
obrigatoriamente devem
implementar o método
                             verifica     se   uma
paint(), responsável por     determinada tecla foi
desenhar a tela;             pressionada.
ClasseCanvas

                         • Graphics      possui
•O   método paint()
                         diversos      métodos
recebe          como
                         para desenhar na
argumento         uma
                         tela,    tais   como:
instância de Graphics,
                         drawImage(),
com a qual é possível
                         drawRect(), fillRect(),
desenhar na tela;
                         drawString(), etc.
ClasseCanvas (Imagens x Portabilidade)

                         •Todos    os desenhos
• A altura e a largura
da tela podem ser        devem ser sempre
obtidas        pelos     posicionados de acordo
métodos getHeight()      com as dimensões de
e         getWidth(),    tela, permitindo a
respectivamente;         portabilidade       da
                         aplicação.
ClasseCanvas (Teclas x Portabilidade)

                         •As    "Soft   Keys"    não
• Qualquer tecla que o   possuem           constantes
usuário    pressionar    definidas em Canvas, ou
                         seja, o keyCode varia de
pode ser tratada pelo    aparelho para aparelho.
método                   Com isso, o uso de
                         Commands é recomendado,
keyPressed(int           visando evitar-se problemas
keyCode);                de portabilidade.
Exemplo de Splash Screen com Canvas
Constantes de teclas emCanvas
GameCanvas x Canvas

                         • Em GameCanvas, não
• O MIDP 2.0 apresenta
                         há necessidade de
a classe GameCanvas,
                         implementar o método
que herda de Canvas e
                         paint(). Graphics é
possui        algumas
                         obtido            com
vantagens em relação a
                         getGraphics()   e   o
anterior,        sendo
                         estado das teclas com
bastante   útil   para
                         getKeyStates().
jogos;
Constantes de teclas emGameCanvas
Integração com a WEB
• J2ME   é capaz de realizar
requisições HTTP, do tipo GET ou
POST, bem como tratar suas
respostas. Isso permite:
   • Envio de conteúdo para
     uma aplicação PhP, RoR
     ou um Servlet;
   • A aplicação Web pode
     integrar o conteúdo a
     um banco de dados;
   • O cliente JavaME pode
     mostrar a resposta da
     requisição.
Pacotes Opcionais
•FileConnection and PIM API (JSR 75);
•Java APIs for Bluetooth 1.1 (JSR 82);
•Mobile Media API 1.1 (JSR 135);
•Location API for J2ME 1.1 (JSR 179);
•Mobile 3D Graphics API for J2ME 1.1
(JSR 184);
•Wireless Messaging API 2.0 (JSR 205);
    • Advanced             Multimedia
       Supplements         1.1   (JSR
       234);
    • Mobile Sensor API (JSR
       256);
    • Entre outros...
JavaME

JavaME

  • 1.
    ERISVALDO GADELHA SARAIVAJÚNIOR Tecnólogo em Sistemas para Internet pelo IFPB Graduando em Ciência da Computação pela UFPB Pesquisador do LabTEVE (Laboratório de Tecnologias para o Ensino Virtual e Estatística) E-mail: erisvaldojunior@gmail.com Site: http://erisvaldojunior.com Twitter: http://twitter.com/erisvaldojunior
  • 2.
    Objetivo ROTEIRO A plataforma J2ME Desenvolver aplicações para dispositivos móveis considerando fatores como Exemplos Práticos portabilidade, uso de memória e processamento. Interface X Portabilidade Web / Pacotes Opcionais Próximos Passos
  • 4.
    Visão geral daplataforma Java [SUN, 2008]
  • 5.
    Configurações do JavaME CLDC 1.0 / CLDC 1.1
  • 6.
    Perfis do CLDC •Trata-se da especificação • Revisão da especificação original (JSR 37); original (JSR 118); •Provê o núcleo necessário • Componentes de para aplicações móveis, como componentes básicos interface aprimorados, de interface e conexão de HTTPS, suporte a jogos e rede. aplicações multimídia. MIDP 2 .1 . . . MIDP 3.0*
  • 7.
    O que vamosusar Possíveis pacotes opcionais • Mobile Media API (MMAPI) – JSR 135; • Wireless Messaging API (WMA) – JSR 205; •É o "padrão de •File Connection mercado" atual. Optional Package (FCOP) – JSR 75.
  • 8.
    Ciclo de vidade uma aplicação JavaME [FONSECA, 2005]
  • 9.
    Estrutura básica declasses [FONSECA, 2005]
  • 10.
    Estrutura expandida declasses Comum a todas as versões do MIDP MIDP 2.0 ou superior
  • 11.
  • 12.
    Muita hora nessacalma... • Os Commands são • Apesar da grande essenciais. Você pode quantidade de classes, elas adicionar Commands em são de muito fácil uso. Em qualquer tela. Eles regem a geral, basta apenas chamar navegação da sua aplicação. o construtor da classe, setar Basta implementar o alguns métodos e depois método commandAction() informar ao Display para da interface mostrá-la na tela; CommandListener.
  • 13.
    Persistência de Dados •Através do RMS (Record • Possui recursos Management Store), um interessantes, como esquema de navegar pelos registros armazenamento bastante através de um RecordEnumeration, simples do JavaME; filtrando-os da maneira • Uma aplicação pode que achar conveniente acessar múltiplos Record (RecordFilter) e Stores e cada um poder ordenando-os também ter N registros. como quiser (RecordComparator).
  • 14.
    Persistência de Dados Forma de armazenamento dos Record Stores
  • 16.
    Tecnologias utilizadas • Mobility •Game Builder(Não) •Visual Mobile Designer (Não, é a baba é?)
  • 17.
    NetBeans 6.5 (Fullou Mobility) •Suporte completo a plataforma JavaME; •Ferramenta RAD para navegação de telas com o Visual Mobile Designer; •Ferramenta RAD para o design dos jogos com o Game Builder.
  • 18.
    Emuladores Sun Java Wireless Toolkit (JWT) Nokia S40/S60 SDK MotoDEV SDK
  • 19.
    Emuladores Sun Java Wireless Toolkit (JWT) Nokia S40/S60 SDK MotoDEV SDK
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
    Mas esses exemplosestão muito feios... •Vamos melhorá-los! •SplashScreen herdando de Canvas; •Uso de RecordFilter/RecordComparator no Exemplo 3; •Trocar os componentes de alto nível (Alert, Form, List) por telas de baixo nível herdando de Canvas.
  • 28.
  • 29.
  • 31.
    Principais classes doJavaME Comum a todas as versões do MIDP MIDP 2.0 ou superior
  • 32.
    ClasseCanvas • Classe abstrataque deve • As classes que ser especializada para a confecção de uma tela em herdam de Canvas baixo nível; podem implementar • As classes que herdam o método de Canvas keyPressed(), que obrigatoriamente devem implementar o método verifica se uma paint(), responsável por determinada tecla foi desenhar a tela; pressionada.
  • 33.
    ClasseCanvas • Graphics possui •O método paint() diversos métodos recebe como para desenhar na argumento uma tela, tais como: instância de Graphics, drawImage(), com a qual é possível drawRect(), fillRect(), desenhar na tela; drawString(), etc.
  • 34.
    ClasseCanvas (Imagens xPortabilidade) •Todos os desenhos • A altura e a largura da tela podem ser devem ser sempre obtidas pelos posicionados de acordo métodos getHeight() com as dimensões de e getWidth(), tela, permitindo a respectivamente; portabilidade da aplicação.
  • 35.
    ClasseCanvas (Teclas xPortabilidade) •As "Soft Keys" não • Qualquer tecla que o possuem constantes usuário pressionar definidas em Canvas, ou seja, o keyCode varia de pode ser tratada pelo aparelho para aparelho. método Com isso, o uso de Commands é recomendado, keyPressed(int visando evitar-se problemas keyCode); de portabilidade.
  • 36.
    Exemplo de SplashScreen com Canvas
  • 37.
  • 38.
    GameCanvas x Canvas • Em GameCanvas, não • O MIDP 2.0 apresenta há necessidade de a classe GameCanvas, implementar o método que herda de Canvas e paint(). Graphics é possui algumas obtido com vantagens em relação a getGraphics() e o anterior, sendo estado das teclas com bastante útil para getKeyStates(). jogos;
  • 39.
  • 41.
    Integração com aWEB • J2ME é capaz de realizar requisições HTTP, do tipo GET ou POST, bem como tratar suas respostas. Isso permite: • Envio de conteúdo para uma aplicação PhP, RoR ou um Servlet; • A aplicação Web pode integrar o conteúdo a um banco de dados; • O cliente JavaME pode mostrar a resposta da requisição.
  • 42.
    Pacotes Opcionais •FileConnection andPIM API (JSR 75); •Java APIs for Bluetooth 1.1 (JSR 82); •Mobile Media API 1.1 (JSR 135); •Location API for J2ME 1.1 (JSR 179); •Mobile 3D Graphics API for J2ME 1.1 (JSR 184); •Wireless Messaging API 2.0 (JSR 205); • Advanced Multimedia Supplements 1.1 (JSR 234); • Mobile Sensor API (JSR 256); • Entre outros...