Jornada de cursos - J2ME Aula 1 – Overview e Conceitos básicos.
Java 2 Platform, Micro Edition (J2ME) - dpi.ufv.brdpi.ufv.br/~nacif/cmovel/j2me2006a.pdf ·...
-
Upload
dangkhuong -
Category
Documents
-
view
253 -
download
0
Transcript of Java 2 Platform, Micro Edition (J2ME) - dpi.ufv.brdpi.ufv.br/~nacif/cmovel/j2me2006a.pdf ·...
J2ME 1
Java 2 Platform, Micro Edition (J2ME)
Alcione de Paiva – DPI – Granbery
Partes deste material foram adaptadas de Mauro Nacif Masha GutkhenKeren Gazit
2006
J2ME 2
Conteúdo
O que é J2ME?J2ME conceitos básicos
Configurações (CLDC, CDC)Profiles (MIDP)
MIDlet, MIDlet SuiteClasses básicas da APIUso e instalação ExemplosExercícios
J2ME 3
Introdução
Dispositivos de informação inteligentes são uma necessidade em nossa moderna. Tais dispositivos podem ser:
Telefones celularessmart cardsPDAsPalmtopsDispositivos eletrônicos em geral
Estes dispositivos tendem a ser direcionados para um propósito específico, com recurso limitado, conectados em rede.
J2ME 4
MotivaçõesYears to Reach 25% Market Penetration
0
5
10
15
20
25
30
35
40
Telephone PC Cellular Internet Mobileinternet
Category
Year
s
=> penetração de 25% do mercado da Internet móvel em quatro anos (Forrester)
J2ME 5
Requisitos de ambiente
É necessário um ambiente adaptado para dispositivos com recursos limitados
As limitações são: Memória extremamente limitadaTamanho de tela pequena Métodos de entrada alternativos Processadores lentos
J2ME 6
Qual é a solução?
Devido à grande demanda a Sun decidiu desenvolver uma edição especial de Java: J2ME (Java 2 Micro Edition).
J2ME 7
J2ME 8
Penetração da Tecnologia Java
Developers.sun.com (February 14-17, 2005)
110 operadoras no mundo permitem deployments em JavaUsados em mais de 400 modelos de mais de 40 fabricantes diferentesUsada em mais de 750 milhões de smartcards.
J2ME 9
Penetração da Tecnologia Java
Enterprise Developer News (Tuesday, April 12, 2005)
O desenvolvimento em J2ME cresceu 33% em apenas seis meses“É mais efetivo em termos de custo o desenvolvimento em J2ME uma vez que não é necessário reescrever a aplicação para dispositivos diferentes”.
J2ME 10
Edições de Java
Dispositivos diferentes têm exigências diferentes e expectativas diferentes de Java.Uma plataforma (solução) não pode abarcar todos os segmentos do mercado (servidor web , vídeo games etc.)Usuários/desenvolvedores querem flexibilidade.
J2ME 11
Edições de Java
A Plataforma Java 2 é dividida em três edições.Cada edição fornece um ambiente completo para executar aplicações baseadas em java, inclusive a máquina virtual Java (VM) e classes de tempo de execução. As três edições abordam tipos diferentes de aplicações que executam em tipos diferentes de dispositivos.
J2ME 12
Edições de Java
Java2 Standard Edition
(J2SE™)
Java2 Enterprise Edition
(J2EE™)
Java2 Micro Edition
(J2ME™)
Plataforma Java 2
Aplicações desktop &Aplicações workstation
Aplicações empresariaisde alto desempenho
Dispositivos comLimitações de memória e processamento
J2ME 13
Edições de Java
Cada edição define conjuntos diferentes de bibliotecas de classe. Existem milhares de classes básicas de J2SE, ocupando 10-20 megabytes de espaço. J2ME fornece um número
menor de classes.
J2ME
J2SE
J2EE
J2ME 14
PersonalJava e EmbeddedJava
J2ME não é a primeira tentativa de adaptar Java para ambientes restritos.PersonalJava
Usa as classes básicas de Java 1.1 com algumas características de Java 2.A implementação ainda exige para 2 megabytes de memória e um processador rápido para executar.
J2ME 15
PersonalJava e EmbeddedJava
EmbeddedJava Cada comportamento da JVM e das classes runtime são opcionais – o implementador pode escolher exatamente que classes e métodos são requeridos.Perda da portabilidade.
J2ME 16
J2ME Conceitos básicos
ConfigurationPlataforma mínima requerida para um grupo de dispositivos
ProfileAtende necessidades específicas de uma certa família de dispositivos
Pacotes opcionais
J2ME Profile
J2MELibraries
Java Virtual Machine
Prof
iles
Con
figur
atio
n
Sistema operacional
Java Language
J2ME 17
J2ME Conceitos básicos
JavaCardJ2ME
CLDC
J2EE
Application Server
Enterprise Services
Standard Library
J2SE
JVM (HotSpot)
JavaCard API
JCRE
CDC
CLDC Core APICLDC Core API
CVM KVM
PD
A
Profile
Mobile
Internet dispositiv
oO
ther P
rofile
Person
Profile
Foundation P
rofile
Java Language
J2ME 18
J2ME Conceitos básicos
Java Card Cerca de 50K de
memória Três componentes:
JCVM, JCRE, JC API
2 diferentes VMs: Conversor
Interpretador
Class file(s)
Converter
CAP files
Off-card installation program
CAD
On-card installer
Interpreter
Runtime environment
PC ou workstation
Smart card
J2ME 19
J2ME Conceitos básicos
JavaTV Baseado em J2SE VM no receptor de
TV & executa byte code
Aplicações sob-demanda
Applications & Applets
Java Platform
Digital TV Receiver
Device Drivers
Java TV API
Real Time OS
Application layer
Java technology layer
RTOS layer
Hardware layer
J2ME 20
J2ME Conceitos básicos
J2ME está baseada em 3 conceitos básicos: Configurations ProfilesPacotes opcionais
J2ME 21
Configurações
Uma configuration é um ambiente Java completo, consistindo de:
Uma Java virtual machine (VM) para executar Java bytecode Código nativo para interagir com o sistema subjacente Um conjunto de classes básicas Java de tempo de execução
Para usar uma configuration, um dispositivo deve atender alguns requerimentos mínimos.
J2ME 22
Configurações
O conjunto de classes básicas e pequeno e deve ser expandido com classes adicionais fornecidas pelo J2ME profiles ou pelo implementador da configuration.Configurations não define classes de interface com o usuário.
J2ME 23
Configurações
Configuration
CLDC CDC
Connected Limited Device Configuration
Connected Device Configuration
J2ME 24
CLDC vs. CDC
CLDC Para dispositivos muito limitados160 - 512 KB de memória totalProcessador de 16-bit ou 32-bitBaixo consumo de energia, com possível uso de bateriaConectividade com largura de banda limitada
CDC2 MB ou mais de memória Processador de 32-bitConectividade com banda larga, com o uso freqüente de TCP/IP
J2ME 25
CLDC vs. CDC - VM
Características ausentes naCLDC VM:
Tipos de Ponto flutuante (1.0)Finalização de objetos JNI ou reflectionThread groups ou daemon threadsClass loaders para usuário
Mudanças na verificação/ pre-verificação
O CDC suporta uma máquina virtual Java 2 completa
J2ME 26
KVM e CVM
KVM - Java virtual machines para o CLDC CVM - Java virtual machines para o CDCEscritas para trabalhar especificamente em ambientes limitados e para serem facilmente portadas para diferentes plataformas.
J2ME 27
CLDC vs. CDC – J2SE Subset
CLDC inclui classes da:
java.lang java.io java.util
Somente classes selecionadas de cada pacote foram incluídas.
CDC inclui 17 pacotes
J2ME 28
CLDC vs. CDC – J2SE Subset
CDC CLDCJ2SE
J2ME 29
Lidando com I/O
J2SE inclui várias classes para realizar I/O.Existe um número grande de classes I/O e elas tendem a encapsular modelos de I/O que não são necessariamente encontrados em todos os dispositivos. Por exemplo, alguns dispositivos handheld não possuem sistemas de arquivo. Suporte a Socket, também não é universal.
J2ME 30
Lidando com I/O em CLDC
CLDC define um conjunto novo de APIs para I/O chamado de Generic Connection Framework. O GCF, parte do novo pacote javax.microedition.io, define interfaces para os diferentes tipos de I/O que são possíveis.O CLDC não define, de fato, qualquer implementação de I/O. Isto fica a cargo do profiles e/ou do fabricante do dispositivo.
J2ME 31
GCF - exemploimport java.io.*; import javax.microedition.io.*;
StreamConnection conn = null; InputStream is = null; String url = "socket://somewhere.com:8909";
try { conn = (StreamConnection) Connector.open( url ); is = conn.openInputStream(); .... // etc. etc.
} …
J2ME 32
Lidando com I/O em CDC
Uma vez que CDC é um superconjunto do CLDC, ele inclui o GCF. CDC também requer suporte GCF para dois tipos específicos de conexões: arquivos e datagramas. A razão: CDC inclui as classes dos pacotes java.io e java.net.
J2ME 33
J2ME Conceitos básicos
J2ME está baseada em 3 conceitos básicos: Configurations ProfilesPacotes opcionais
J2ME 34
Profiles
Adiciona classes específicas do domínio para uma configuration:
Para adicionar funcionalidade ausentesPara suportar usos específicos do dispositivo
A maioria de profiles define classes de interface com o usuário para construir aplicações interativas.Para usar um profile, o dispositivo deve atender um mínimo de requisitos da configuration e do profile.
J2ME 35
Profiles
Profile
MIDP PDAP PPPBPFP
Mobile Information
device
Personal Digital
Assistant Profile
Foundation Profile
Personal Basis Profile
Personal Profile
J2ME 36
MIDP – MID Profile
MIDP é direcionada para uma classes de dispositivos conhecidos como mobile information devices (MIDs). Características Mínimas do MIDs:
Memória suficiente para executar aplicações MIDP Visor com pelo menos 96 X 56 pixels, monocromático ou coloridoUm keypad, teclado, ou tela sensível ao toqueCapacidade de rede sem fio bi-direcional
J2ME 37
MIDP - Especificação
Existem duas versões de MIDP:MIDP 1.0 – lançado em Setembro de 2000. Muitos dispositivos disponíveis no mercado suportam esta versão. MIDP 2.0 – lançado em Dezembro de 2002. Grande parte dos dispositivos o suportam.
J2ME 38
MIDP - Especificação
O MIDP adiciona APIs às APIs básicas definidas pelo CLDC. As novas características incluem:
Suporte para gerência do ciclo de vida da aplicação de modo similar aos applets no J2SE. Armazenamento persistente de dados. Conectividade baseada no HTTP no GCF. Suporte simples às interface com o usuário, com flexibilidade suficiente para construção de jogos e aplicações de negócio.
J2ME 39
MIDP - Especificação
A especificação MIDP 2.0 inclui novas APIs em relação a versão 1.0, sendo as principais:
javax.microedition.io.PushRegistry – classe responsável por lidar com push registry (um MIDlet responder a um evento externo sem estar ativo). javax.microedition.lcdui.game – pacote responsável por estender as capacidades do MIDP para jogos 2D, lidando com layers, sprites e transparências.
J2ME 40
MIDP - Especificação
Outros avanços da MIDP 2.0:Ampliação da capacidade de interface com o usuário. Suporte a mídia (wav)Ampliação da capacidade de conectividade (HTTPS, datagram, sockets, server sockets e comunicação com a porta serial)Suporte Over-the-air (OTA) – instalação automática pelo ar.
J2ME 41
MIDP Limitações das aplicações
Memória é um recurso particularmente escasso.
Os primeiros celulares Motorola habilitados para J2ME limitavam o tamanho de uma aplicação a 50K.
J2ME 42
J2ME Conceitos básicos
J2ME está baseada em 3 conceitos básicos:Configurations ProfilesPacotes opcionais
J2ME 43
Pacotes opcionais
Conjunto de APIs para suportar comportamentos adicionais comuns. Possui dependências específicas com uma configuration particular e/ou um ou mais profiles.Exemplos de pacotes opcionais :
RMIBluetoothJDBC
J2ME 44
Pacotes opcionais JCP APIs suportadas no J2ME Wireless Toolkit JSR API Name JSR 139 CLDC 1.1 Connected Limited Device Configuration JSR 118 MIDP 2.0 Mobile Information Device Profile JSR 185 JTWI 1.0 Java Technology for the Wireless Industry JSR 205 WMA 2.0 Wireless Messaging API JSR 135 MMAPI 1.1 Mobile Media API JSR 75 PIM and File PDA Optional Packages for the J2ME Platform JSR 82 Bluetooth and OBEX Java APIs for Bluetooth JSR 172 J2ME Web Services Specification JSR 184 3D Graphics Mobile 3D Graphics API for J2ME
J2ME 45
Em resumo
Configuration, profile e pacotes opcionais devem ser selecionados.profiles baseados em CDC tornam o desenvolvimento mais simples, mas não é adequado para dispositivos low-end. profiles baseados em CLDC tornam o desenvolvimento mais difícil, especialmente quando é necessário diminuir o tamanho de uma aplicação para executar em muitos dispositivos.
J2ME 46
J2ME 47
MIDlets – o coração de J2ME…
Do mesmo modo que os Applets e os Servlets as aplicações MIDP são executadas em um ambiente. As aplicação são denominadas de MIDlet, a qual é uma aplicação MID Profile.
J2ME 48
MIDlets – o coração de J2ME…
Toda aplicação deve estender a classe javax.microedition.midlet.MIDlet para permitir que o programa gerente de aplicação (AMS):
controle o MIDlet.Seja capaz de acessar as propriedades do descritor da aplicação. Notificar e requisitar mudanças de estado.
J2ME 49
MIDlets – o coração de J2ME…
A classe que estende a classe MIDlet é a classe principal da aplicação. A classe MIDlet define métodos abstratos que devem ser implementados pela subclasse (por exemplo: startApp(), destroyApp(), notifyDestroyed()).
J2ME 50
MIDlets – o coração de J2ME…
J2ME 51
MIDlet Suite
Um ou mais MIDlets são empacotados juntos em uma MIDlet suite, composta de:
Arquivo JAR (Java archive) Arquivo JAD (Java Application Descriptor)
Todas as classes definidas pelo usuário e recursos requeridos pelos MIDlets na suite devem estar no arquivo JAR.
J2ME 52
MIDlet Suite
O arquivo JAR file deve também incluir um manifest que descreve os MIDlets na suite. O descritor da aplicação (JAD) contém informação similar, e é usado por dispositivos para obter informação sobre uma MIDlet suite sem ter que baixar e instalar o MIDlet suite primeiro.
J2ME 53
Criando um MIDlet
J2ME 54
Criando um MIDletImportando pacotes
específicos do MIDP
import javax.microedition.lcdui.*;import javax.microedition.midlet.*;
J2ME 55
Criando um MIDletExtends MIDlet
Implements CommandListener
public class HelloMIDlet extends MIDlet implements CommandListener {
J2ME 56
Criando um MIDlet
Criando um form,
adicionando Commands
public HelloMIDlet() { mMainForm = new Form("HelloMIDlet"); mMainForm.append(new StringItem(null,
"Hello, Seminar Software Design!")); mMainForm.addCommand(new Command("Exit",
Command.EXIT, 0)); mMainForm.setCommandListener(this); }
J2ME 57
Exemplos de classes da API MIDP
MIDletFormCommand
CommandListenerItemCommandListener
Item
J2ME 58
Exemplos de classes da API
MIDlet – Base class Form Command
CommandListener ItemCommandListener
Item
J2ME 59
MIDlet class API
protected abstract void startApp() protected abstract void pauseApp()protected abstract void destroyApp(boolean unconditional)public final String getAppProperty(String key) public final void notifyDestroyed()
J2ME 60
Exemplos de classes da API
MIDlet
FormCommand
CommandListenerItemCommandListener
Item
J2ME 61
Classe Form
Um Form é uma Screen (tela) que contém uma mistura arbitrária de itens: imagens, campos de texto read-only, campos de texto editáveis, campos de data editáveis, medidores, grupos de escolha e itens adaptados. De modo geral, qualquer subclasse da classe Item pode estar contida em um form. A implementação lida com o layout, navegação e rolamento (scrolling).
J2ME 62
Classe Form API
Gerência de Itempublic int append(Item item)public Item get(int itemNum)
Layoutpublic void setItemStateListener(ItemStateListener iListener)
J2ME 63
Exemplos de classes da API
MIDletFormCommand
CommandListenerItemCommandListener
Item
J2ME 64
Classe Command
A classe Command representa o significado de uma ação. Objetos Command estão presentes na interface com o usuário.A ação é, de fato, implementada em um objeto CommandListener. O objeto CommandListener é associado com um objeto Displayable ou um Item.Uma vez que o Comando é acionado, o CommandListener é invocado e a ação é realizada.
J2ME 65
Classe Command
Command labelpublic String getLabel()
Command type public int getCommandType()
Command prioritypublic int getPriority()
J2ME 66
Classe Command
new Command(“Compre", Command.ITEM, 1);
new Command("Info", Command.ITEM, 1);
new Command(“voltar", Command.BACK, 1);
Label tipo prioridade
J2ME 67
Classe Command
Tipo
BACK Comando navigacional para retornar à tela anterior.CANCEL Comando padrão de cancelamento.EXIT Comando padrão de saída da aplicação.HELP Comando para solicitação de ajuda on-line.ITEM Comando relacionado com itens na tela ou elementos de escolha.OK Comando padrão de resposta positiva a um dialogo. SCREEN Especifica um comando definido pela aplicação que pertence à tela corrente. STOP Comando para parar o processo em execução no momento.
J2ME 68
Classe CommandPrioridade
A aplicação usa o valor de prioridade para descrever a importância deste comando relativamente a outros comandos na mesma tela. Valores de prioridade são inteiros, onde um número menor indica maior importância.
Tipicamente, a implementação escolhe a colocação de um comando primeiro baseado no tipo de comando e então comandos semelhantes em lugares baseado em uma ordem de prioridade. Isto poderia significar que o comando com a prioridade mais alta é colocado de forma que usuário pode ativá-lo diretamente e o comando com mais baixa prioridade é colocado em um menu.
J2ME 69
classe CommandListener API
O objeto é um listener para Commands que estão associados à Displayable. public void commandAction(Command c, Displayable d)
J2ME 70
classe ItemCommandListener API
Quando um command (associado a um Item) é invocado, a aplicação é notificada por meio da chamada ao método commandAction() de um objeto ItemCommandListener que foi associado ao Item.public void commandAction(Command c, Item item)
J2ME 71
Exemplos de classes da API
MIDletFormCommand
CommandListenerItemCommandListener
Item
J2ME 72
Classe Item
Uma superclasse para componentes que podem ser adicionados a um Form. Todos os objetos Item possuem um campo labelEscolha o layout, tamanho e aparência do Item Associe Commands
J2ME 73
Classe Item API
public void setDefaultCommand(Command cmd) public void setItemCommandListener(ItemCommandListener listener)public void notifyStateChanged()public int getPreferredWidth()
J2ME 74
Iniciando…
Passo 1: Baixe J2ME Wireless Toolkit da sun: http://java.sun.com/products/j2mewtoolkit/download-2_2.htmlPasso 2: Instale J2SE SDKPasso 3: Instale o J2ME Toolkit.
J2ME 75
Após a instalação….
Atalhos estão disponíveis no menu iniciar.
Novos diretórios são criados
J2ME 76
Usando KToolbar
J2ME 77
Criando uma nova Aplicação
Clique “New Project”.Entre o nome do projeto e o nome da MIDlet.Novos diretórios serão criados automaticamente.
J2ME 78
Onde colocar os arquivos?
Bibliotecas de classes externas, (JAR ou ZIP) para todos projetos KToolbar.J2ME/apps/lib
Arquivos fonteJ2ME/apps/{proj}/src
Arquivos de recursosJ2ME/apps/{proj}/res
Bibliotecas de classes externas, (JAR ou ZIP) para um projeto específico
J2ME/apps/{proj}/lib
JAR, JAD, arquivos manifest descompactados.
J2ME/apps/{proj}/bin
fontes, recursos, e arquivos bináriosJ2ME/apps/{proj}
J2ME 79
Depois?
Escolha a plataformaEscreva seu códigograveBuild (Compilar + Preverify)execute
J2ME 80
Distribuição para dispositivos reais
Crie um pacoteColoque o pacote em algum lugar da Internet.Atualize o arquivo .jad Download a aplicação para o celularExecute…
J2ME 81
Exemplos
OlaMundo Ola2 Envio de mensagem e registro Push Comunicação HTTP
J2ME 82
Exemplo: OlaMundoimport javax.microedition.midlet.*;import javax.microedition.lcdui.*;
public class OlaMundoMIDlet extends MIDlet implements CommandListener {
private Command exitCommand; // The exit command private Display display; // The display for this MIDlet public OlaMundoMIDlet() { display = Display.getDisplay(this); exitCommand = new Command(“Sair", Command.SCREEN, 2); }
Comando de tela para sair
J2ME 83
Exemplo: OlaMundopublic void startApp() { TextBox t = new TextBox("Ola Mundo", "Ola mundo!", 256, 0); t.addCommand(exitCommand); t.setCommandListener(this); display.setCurrent(t); } public void pauseApp() { } public void destroyApp(boolean unconditional) { } public void commandAction(Command c, Displayable s) { if (c == exitCommand) { destroyApp(false); notifyDestroyed(); } }}
Cria a caixa de textoRelaciona o comando com o texto
Define quem vai escutar o comando
Mostra a tela
Implementa a saída da aplicação
Se verdadeiro o MIDlet deve liberar todos os recursos. Se falso o MIDlet pode lançar MIDletStateChangeException para indicar que não quer ser destruído neste momento.
J2ME 84
Exemplo: OlaMundo Criando o projeto no WTK
J2ME 85
Exemplo: OlaMundo Criando o projeto no WTK
Edite o código fonte e o grave em {toolkit}\apps\OlaMundo\src\OlaMundo.java
Build
Execute
J2ME 86
Exemplo: OlaMundo Simulando o OTA (Over The Air) para
deployment
J2ME 87
Exemplo: OlaMundo Simulando o OTA (Over The Air) para
deployment
J2ME 88
Exemplo: OlaMundo Simulando o OTA (Over The Air) para
deployment
J2ME 89
Exemplo: OlaMundo Simulando o OTA (Over The Air) para
deployment
J2ME 90
Exemplo: OlaMundo Simulando o OTA (Over The Air) para
deployment
J2ME 91
Exemplo: OlaMundo Simulando o OTA (Over The Air) para
deployment
J2ME 92
Exemplo: OlaMundo Simulando o OTA (Over The Air) para
deployment
J2ME 93
Exemplo: OlaMundo (outra versão)
import javax.microedition.midlet.*;import javax.microedition.lcdui.*;
public class OlaMundoMIDlet extends MIDlet implements CommandListener {
public void startApp() { Display display = Display.getDisplay(this); Form mainForm = new Form("OlaMundoMIDlet"); mainForm.append("Ola Mundo!"); Command exitCommand = new Command("Exit", Command.EXIT, 0); mainForm.addCommand(exitCommand); mainForm.setCommandListener(this); display.setCurrent(mainForm); }
J2ME 94
Exemplo: OlaMundo public void pauseApp() { } public void destroyApp(boolean unconditional) { } public void commandAction(Command c, Displayable s) { if (c.getCommandType() == Command.EXIT ) { notifyDestroyed(); } }}
J2ME 95
Exemplo: OlaMundo no NetBeans Mobile Edition
Novo Projeto
J2ME 96
Exemplo: OlaMundo no NetBeans Mobile Edition
Desmarque o Create Hello MIDlet
J2ME 97
Exemplo: OlaMundo no NetBeans Mobile Edition
Pressione Finish
J2ME 98
Exemplo: OlaMundo no NetBeans Mobile Edition
Selecione New File
J2ME 99
Exemplo: OlaMundo no NetBeans Mobile Edition
Pressione Finish
J2ME 100
Exemplo: OlaMundo no NetBeans Mobile Edition
Copie o conteúdo da transparência para o MIDLet Execute o projeto
J2ME 101
Exemplos
OlaMundo Ola2 Envio de mensagem e registro Push Comunicação HTTP
J2ME 102
Exemplo: Ola2import javax.microedition.midlet.*;import javax.microedition.lcdui.*;
// Ola que pergunta o nome do usuário
public class Ola2Midlet extends MIDlet implements CommandListener { private Command exitCommand = new Command("Sair", Command.EXIT, 1); private Command okCommand = new Command("OK", Command.OK, 1); private Form mainForm; private Display display; public Ola2Midlet() { mainForm = new Form("Ola"); }
J2ME 103
Exemplo: Ola2 public void startApp() { display = Display.getDisplay(this); mainForm.append( new TextField("Entre com seu nome", "", 15, TextField.ANY)); mainForm.addCommand(exitCommand); mainForm.addCommand(okCommand); display.setCurrent(mainForm); mainForm.setCommandListener(this); } public void pauseApp() { } protected void destroyApp(boolean unconditional) { }
Indica o tipo do TextField: ANY, DECIMAL, EMAILADDR, INITIAL_CAPS_SENTENCE,
INITIAL_CAPS_WORD, NON_PREDICTIVE, NUMERIC, PHONENUMBER, PASSWORD,
SENSITIVE, UNEDITABLE, URL
J2ME 104
Exemplo: Ola2 public void commandAction(Command c, Displayable s) { if (c == exitCommand) { destroyApp(false); notifyDestroyed(); } else if (c == okCommand) { TextField t = (TextField)mainForm.get(0); mainForm.append( new TextField("", "Ola "+ t.getString(), 15, TextField.ANY)); } }}
J2ME 105
Exemplos
OlaMundoOla2Envio de mensagem e registro PushComunicação HTTP
J2ME 106
Exemplos: Envio de mensagens
O J2ME Wireless Toolkit suporta a Wireless Messaging API (WMA) com um ambiente sofisticado de simulação.
WMA 1.1 (JSR 120) permite que os MIDlets enviem e recebam mensagens SMS (Short Message Service) ou CBS (Cell Broadcast Service).
WMA 2.0 (JSR 205) também inclui suporte para mensagens MMS (Multimedia Message Service).
J2ME 107
Exemplos: Envio de mensagens
No entanto, para se beneficiar completamente do uso de mensagens, seria útil que a aplicação pudesse ser despertada automaticamente, a partir da chegada de uma mensagem ou de um outro evento, como um evento de timer.
Este é o conceito capturado pelo registro push, especificado pelo na MIDP 2.0 (JSR 118).
J2ME 108
Exemplos: Envio de mensagens
Deste modo poderemos ter aplicações que recebem e tratam os dados automaticamente, como por exemplo uma aplicação que gera um gráfico das ações da bolsa.
Ou uma aplicação que atualiza automaticamente um roteiro de visitas para trabalhadores na rua, em função da chegada de pedidos.
J2ME 109
Exemplos: Envio de mensagens
J2ME 110
Exemplos: Envio de mensagens
J2ME 111
Exemplos: Envio de mensagens
O registro de uma aplicação para ser acordada por tempo ou por mensagens pode ser dinâmico ou estático.Dinâmico – em tempo de execução, por meio de chamadas
a métodos:
registerConnection(String connection, String midlet, String filter)
registerAlarm(String midlet, long time)
Estático – pela definição no arquivo JADMIDlet-Push-<n>: <ConnectionURL>,<MIDletClassName>, <AllowedSender>
MIDlet-Push-2: socket://:100, corej2me.NewsLink, *
J2ME 112
Exemplos: Envio de mensagens
Neste exemplo faremos um MIDLet que é ativado automaticamente pela chegada de uma mensagem sms, e que exibe seu conteúdo no display. O registro será estático.
J2ME 113
Exemplos: Envio de mensagensimport javax.microedition.midlet.*;import javax.microedition.lcdui.*;import javax.microedition.io.*;import javax.wireless.messaging.*;import java.io.IOException;
public class PushTeste extends MIDlet implements CommandListener{ private Display display; private Command cmExit; private Alert alertaMen; int porta = 1000; MessageConnection conexao = null; // Conexao para receber a mensagem Message mensagem;
J2ME 114
Exemplos: Envio de mensagens
public void pauseApp() { } public void destroyApp(boolean unconditional) { }
public PushTeste() { display = Display.getDisplay(this); alertaMen = new Alert("Mensagem recebida!"); alertaMen.setTimeout(Alert.FOREVER); cmExit = new Command("Sair", Command.EXIT, 1); alertaMen.addCommand(cmExit); alertaMen.setCommandListener(this); }
J2ME 115
Exemplos: Envio de mensagenspublic void startApp() { String connectList[]; connectList = PushRegistry.listConnections(true); if (connectList == null || connectList.length == 0) { // iniciado pelo usuario, sair destroyApp(false); notifyDestroyed(); } else { // iniciado por conexao try { conexao = (MessageConnection) Connector.open("sms://:" + porta); mensagem = conexao.receive(); if(mensagem != null && mensagem instanceof TextMessage) { alertaMen.setTitle("Enviado por: " + mensagem.getAddress()); alertaMen.setString(((TextMessage)mensagem).getPayloadText()); display.setCurrent(alertaMen); } }
J2ME 116
Exemplos: Envio de mensagens catch(IOException e) { System.out.println("Exceção!"); } } } public void commandAction(Command c, Displayable s) { if (c == cmExit) { destroyApp(false); notifyDestroyed(); } }}
J2ME 117
Exemplos: Envio de mensagensTeste e Instalação
Registro estático (alteração no JAD)
J2ME 118
Exemplos: Envio de mensagensTeste e Instalação
Inserindo permissões
J2ME 119
Exemplos: Envio de mensagensTeste e Instalação
Criando o pacote Executando via OTAEnviando mensagens por meio do WMA console
J2ME 120
Exemplos: Envio de mensagensTeste e Instalação
Criando o pacote Executando via OTAEnviando mensagens por meio
do WMA console
J2ME 121
Exemplos: Envio de mensagensTeste e Instalação
Criando o pacote Executando via OTAEnviando mensagens por meio do WMA console
J2ME 122
Exemplos: Envio de mensagensTeste e Instalação
Criando o pacote Executando via OTAEnviando mensagens
por meio do WMA console
J2ME 123
Exemplos: Envio de mensagensTeste e Instalação
Criando o pacote Executando via OTAEnviando mensagens
por meio do WMA console
J2ME 124
Exemplos
OlaMundoOla2Envio de mensagem e registro PushComunicação HTTP
J2ME 125
Exemplos: comunicação HTTP
Os MIDlets podem comunicar por meio do protocolo HTTPNeste exemplo o MIDlet faz uma conexão com um Servlet e recebe a contagem de quantas vezes o Servlet foi requisitado
J2ME 126
Exemplos: comunicação HTTPO Servlet
import javax.servlet.http.*; import javax.servlet.*; import java.io.*;
public class HitServlet extends HttpServlet { private int mCount;
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String message = "Hits: " + ++mCount;
response.setContentType("text/plain"); response.setContentLength(message.length()); response.getWriter().println(message); }}
J2ME 127
Exemplos: comunicação HTTPO arquivo web.xml
<?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application
2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd"> <web-app> <servlet> <servlet-name>bob</servlet-name> <servlet-class>HitServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>bob</servlet-name> <url-pattern>/hits</url-pattern> </servlet-mapping> </web-app>
J2ME 128
Exemplos: comunicação HTTPA instalação
J2ME 129
Exemplos: comunicação HTTPO MIDlet
import java.io.*;import javax.microedition.io.*;import javax.microedition.lcdui.*;import javax.microedition.midlet.*;
public class HitMIDlet extends MIDlet implements CommandListener { private Display mDisplay; private Form mMainForm; private StringItem mMessageItem; private Command mExitCommand, mConnectCommand;
public void pauseApp() {} public void destroyApp(boolean unconditional) {}
J2ME 130
Exemplos: comunicação HTTPO MIDlet
public void startApp() { mDisplay = Display.getDisplay(this); mDisplay.setCurrent(mMainForm); } public HitMIDlet() { mMainForm = new Form("HitMIDlet"); mMessageItem = new StringItem(null, ""); mExitCommand = new Command("Exit", Command.EXIT, 0); mConnectCommand = new Command("Connect", Command.SCREEN, 0); mMainForm.append(mMessageItem); mMainForm.addCommand(mExitCommand); mMainForm.addCommand(mConnectCommand); mMainForm.setCommandListener(this); }
J2ME 131
Exemplos: comunicação HTTPO MIDlet
public void commandAction(Command c, Displayable s) { if (c == mExitCommand) notifyDestroyed(); else if (c == mConnectCommand) { Form waitForm = new Form("Waiting..."); mDisplay.setCurrent(waitForm); Thread t = new Thread() { public void run() { connect(); } }; t.start(); } }
J2ME 132
Exemplos: comunicação HTTPO MIDlet
private void connect() { HttpConnection hc = null; InputStream in = null; String url = getAppProperty("HitMIDlet.URL");
try { hc = (HttpConnection)Connector.open(url); in = hc.openInputStream();
int contentLength = (int)hc.getLength(); byte[] raw = new byte[contentLength]; int length = in.read(raw);
in.close(); hc.close();
J2ME 133
Exemplos: comunicação HTTPO MIDlet
String s = new String(raw, 0, length); mMessageItem.setText(s); } catch (IOException ioe) { mMessageItem.setText(ioe.toString()); } mDisplay.setCurrent(mMainForm); }}
J2ME 134
Exemplos: comunicação HTTPA configuração
J2ME 135
Exemplo:Desenvolvimento de uma aplicação visualmente pelo NetBeans
Fazer um MIDLet onde o usuário digite uma temperatura em Fahrenheit e o programa transforme para o equivalente em celcius. C = (F-32)*5/9
J2ME 136
Exemplo:Desenvolvimento de uma aplicação visualmente pelo NetBeans
Novo Projeto
J2ME 137
Exemplo:Desenvolvimento de uma aplicação visualmente pelo NetBeans
Novo MIDLet visual
J2ME 138
Exemplo:Desenvolvimento de uma aplicação visualmente pelo NetBeans
Novo MIDLet visual
J2ME 139
Exemplo:Desenvolvimento de uma aplicação visualmente pelo NetBeans
J2ME 140
Exemplo:Desenvolvimento de uma aplicação visualmente pelo NetBeans
Criar dois formulários e alterar os nomes
J2ME 141
Exemplo:Desenvolvimento de uma aplicação visualmente pelo NetBeans
Inserir comandos para a navegação e execução
J2ME 142
Exemplo:Desenvolvimento de uma aplicação visualmente pelo NetBeans
Criar a navegação
J2ME 143
Exemplo:Desenvolvimento de uma aplicação visualmente pelo NetBeans
Desenhar as telas
J2ME 144
Exemplo:Desenvolvimento de uma aplicação visualmente pelo NetBeans
Desenhar as telas
J2ME 145
Exemplo:Desenvolvimento de uma aplicação visualmente pelo NetBeans
Desenhar as telas
J2ME 146
Exemplo:Desenvolvimento de uma aplicação visualmente pelo NetBeans
Inserir o código para conversão
Colocar o código aqui
J2ME 147
Exemplo:Desenvolvimento de uma aplicação visualmente pelo NetBeans
Inserir o código para conversão
J2ME 148
Exemplo:Desenvolvimento de uma aplicação visualmente pelo NetBeans
Resultado
J2ME 149
J2ME e Web Services
O que é um Web Services
É uma aplicação que existe em um ambiente distribuído, como a Internet. Um Web service aceita uma requisição, realiza a função requisitada e retorna uma resposta.
Tanto a requisiçao quanto a pergunta, usualmente, são registradas em um documento XML (SOAP), e enviada sobre um protocolo de rede, como o HTTP.
É uma nova forma de RPC.
J2ME 150
J2ME e Web Services
O que é um Web Services
A codificação XML para as mensagens obedecem a especificação SOAP.
SOAP: Simple Object Access Protocol. Um protocolo leve com o objetivo de trocar informação estruturada em um ambiente descentralizado e distribuído. Ele provê, por meio de XML, um meio de construir mensagens que podem ser trocadas sobre uma variedade de protocolos.
J2ME 151
J2ME e Web Services
Universal Description, Discovery, and Integration
J2ME 152
J2ME e Web Services
Java fornece uma api para manipular mensagens SOAP: JAX-RPC.
JAX-RPC é uma tecnologia para construir Web services e clientes que usam chamadas remotas a procedimentos e XML.
Com JAX-RPC, o desenvolvedor não precisa lidar com SOAP. JAX-RPC cria uma camada que elimina esta complexidade.
J2ME 153
J2ME e Web Services
No lado do servidor, o desenvolvedor especifica procedimentos remotos por meio da definição de métodos e interfaces Java.
O desenvolvedor também codifica uma ou mais classes que implementam esses métodos.
No lado cliente uma proxy é criada (um objeto local representando o serviço) o programa cliente invoca os método da proxy.
J2ME 154
J2ME e Web Services
WS-I Basic Profile
Provê Compatibilidade
Requer: HTTP binding for SOAP HTTP posts WSDL 1.1 RPC/literal ou document/literal
J2ME 155
J2ME e Web Services
WSA (Web Services API)
JSR 172: J2ME Web Services API (WSA)
Estende plataforma J2ME para suporte a WS através de duas características: Remote Service Invocation XML parsing
J2ME 156
J2ME e Web Services
WSA (Web Services API)
Requer Conformidade ao WS-I Basic Profile.
Suporta SOAP 1.1
J2ME 157
J2ME e Web Services
WSA não suporta:
SOAP Message Attachments
Message HandlersBibliotecas para service end pointsUDDI (Universal Description, Discovery and Integration)
J2ME 158
J2ME e Web Services
WSA
J2ME 159
J2ME e Web Services
WSA
J2ME 160
J2ME e Web Services
Exemplo:
Primeiramente desenvolveremos um WS, que será acessado posteriormente por uma aplicação J2ME.
J2ME 161
J2ME e Web Services
Exemplo:Passo: Criar uma aplicação Web
J2ME 162
J2ME e Web Services
Exemplo:Passo: Criar uma aplicação Web
J2ME 163
J2ME e Web Services
Exemplo:Passo: Criar um Web service
J2ME 164
J2ME e Web Services
Exemplo:Passo: Criar um Web service
J2ME 165
J2ME e Web Services
Exemplo:Passo: Adicionar um serviço
J2ME 166
J2ME e Web Services
Exemplo:Passo: Adicionar um serviço
J2ME 167
J2ME e Web Services
Exemplo:Passo: Adicionar um serviço
J2ME 168
J2ME e Web Services
Exemplo:Passo: testar o serviço
J2ME 169
J2ME e Web Services
Exemplo:Passo: Criar uma aplicação movel
J2ME 170
J2ME e Web Services
Exemplo:Passo: Criar uma aplicação movel
J2ME 171
J2ME e Web Services
Exemplo:Passo: Criar uma aplicação movel
J2ME 172
J2ME e Web Services
Exemplo:Passo: criar o cliente do Web Service
J2ME 173
Apêndice A: Tópicos adicionais
PersistênciaComunicação via BluetoothJXTA - P2PWiFi
J2ME 174
Apêndice B: Ambientes de desenvolvimento
Netbeans com Mobility Pack (Gratuito)Nokia Carbide (pago)
Sun Java Wireless Toolkit (Gratuito) EclipseME (Gratuito) Motorola J2ME™ SDK
(http://www.motocoder.com/motorola)
J2ME 175
Apêndice C: Links
Nokia - www.forum.nokia.com Sun - http://java.sun.com/javame/ http://www.jasonlam604.com/ Motorola (http://www.motocoder.com/motorola)
J2ME 176
FIM