tutorial: desenvolvimento de aplicacoes moveis com java
DESCRIPTION
TRANSCRIPT
Desenvolvimento de aplicações móveis com Java
por Paulo César M. Jeveaux
Agenda
� Apresentação
� Por que desenvolver para celulares?
� O que é JavaME
� Arquitetura
� Wireless Toolkit
� Configurações
� Perfis
� Futuro e Tendências
� Exemplos
31/08/2007
2
Desenvolvimento de aplicações móveis com Java
Paulo César M. Jeveaux
31/08/2007Desenvolvimento de aplicações móveis com Java
3
� Javanês desde 2000;
� Mantenedor do Portal Java e do ESJUG� http://www.portaljava.com� https://esjug.dev.java.net
� Consultor Arquiteto Java EE;
� Palestrante nos principais eventos Java do país. Participante de diversos grupos e comunidades de Java, Linux e Software Livre em geral.
Por que desenvolver para celulares?
Apresentação
31/08/2007
4
Desenvolvimento de aplicações móveis com Java
Por que desenvolver para celular?
� Bilhões de Clientes potenciais;� Mais de 700 milhões dos celulares já possuem Java.
� Clientes potenciais em constante crescimento;
� Eles querem softwares, quem desenvolverá?
31/08/2007
5
Desenvolvimento de aplicações móveis com Java
Por que desenvolver para celular?
� Forte apoio das Fabricantes de Celular;
� E também das operadoras de celular;
� Ainda não se sabe o que é possível fazer;
31/08/2007
6
Desenvolvimento de aplicações móveis com Java
Por que usar Java ME?
31/08/2007
7
Desenvolvimento de aplicações móveis com Java
Por que Java ME?
31/08/2007Desenvolvimento de aplicações móveis com Java
8
� Alguns dispositivos só rodam Java ME;
� Java em dispositivos móveis:� Fácil integração com outras soluções Java;
� Write Once Run Anywhere (WORA);
� Compatibilidade binária;
� Retorno de investimentos;
Por que Java ME?
31/08/2007Desenvolvimento de aplicações móveis com Java
9
� Java ME fornece:� Portabilidade;
� Segurança;
� Conectividade com a Web;
� Etc;
� Java ME é uma especificação, mantida pelo JCP (Java Community Process), assim como a Linguagem Java, a JVM, e tudo mais.
Por que Java ME?
31/08/2007Desenvolvimento de aplicações móveis com Java
10
� Open Source!� A implementação da Sun do Java ME e Java SE já são
Open Source, sob a licensa GPL v2. Também se tornaram Open Source o NetBeans, Solaris, OpenSPARC e StarOffice.� http://www.sun.com/software/opensource/java
� https://mobileandembedded.dev.java.net
O que é Java ME
31/08/2007
11
Desenvolvimento de aplicações móveis com Java
O que é Java ME
31/08/2007Desenvolvimento de aplicações móveis com Java
12
� O Java ME é uma versão reduzida da plataforma Java que permite que aplicativos sejam criados para dispositivos móveis com diversas vantagens da plataforma Java.
� Projetado para dispositivos com limitações de memória, tela e processamento.
� JSRs do Java ME� http://jcp.org/jsr/tech/j2me.jsp
Arquitetura
31/08/2007
13
Desenvolvimento de aplicações móveis com Java
Arquitetura
31/08/2007Desenvolvimento de aplicações móveis com Java
14
Java
KVM
� A KVM é um pequeno ambiente de execução que faz parte da plataforma do Java ME e que foi projetada para ser executada em pequenos dispositivos com grandes restrições de processamento, memória e bateria, como celulares, PDAs, pagers, etc.
31/08/2007
15
Desenvolvimento de aplicações móveis com Java
KVM
31/08/2007Desenvolvimento de aplicações móveis com Java
16
� A KVM está para os pequenos dispositivos assim como a JVM está para os desktops que possuem Java. Porém a KVM implementa apenas o suporte para a arquitetura CLDC.
Wireless Toolkit
WTK
31/08/2007
17
Desenvolvimento de aplicações móveis com Java
WTK
31/08/2007Desenvolvimento de aplicações móveis com Java
18
� WTK;
� Kit de Desenvolvimento para Java ME, contém:� Emuladores de telefones genéricos;� APIs básicas compiladas;� Documentação;� Ambiente para desenvolvimento, depuração e
implantação de aplicativos;
WTK
31/08/2007Desenvolvimento de aplicações móveis com Java
19
� Versão atual 2.5;� Conta com a integração da API Location, nova API de
segurança, Internacionalização, novos recursos multimedia, suporte a SVG, Payment API, melhor suporte a OpenGL 3D API, etc;
� Disponível para download gratuito no site da Sun:� www.java.sun.com/javame
WTK
31/08/2007Desenvolvimento de aplicações móveis com Java
20
KToolBar
OTA Provising (Over The Air)
CDC
CLDC
Configurações
31/08/2007
21
Desenvolvimento de aplicações móveis com Java
Configurações
31/08/2007Desenvolvimento de aplicações móveis com Java
22
� Especifica uma VM e subconjuntos de APIs de Java para uma família de dispositivos;� Connected Device Configuration (CDC)
� Connected, Limited Device Configuration (CLDC)
CDC
31/08/2007Desenvolvimento de aplicações móveis com Java
23
� Ambiente para set-top boxes de TVs à cabo, dispositivos wireless high-end, sistemas automotivos;
� Dispositivos com cerca de 2MB de RAM (alguns PDA’s, telefones 3G, etc.);
CLDC
31/08/2007Desenvolvimento de aplicações móveis com Java
24
� Ambiente para telefones celulares, pagers, PDAs;
� CLDC são usualmente wireless;
� Equipamentos com baixíssimos níveis de processamento e capacidade de memória:� Máximo 512kb de RAM� Ex. Celulares 2G; 2,5G
CLDC
31/08/2007Desenvolvimento de aplicações móveis com Java
25
� A configuração do CLDC possui duas versões, 1.0 e 1.1, veja as melhorias e novidades presentes na versão 1.1:� Ponto Flutuante;
� Classes Calendar, Date e Timezone de acordo com Java SE;
� Nova classe de erro: NoClassDefFoundError;
� Memória mínima passou de 160kb para 192kb;
Configurações e Perfis
31/08/2007Desenvolvimento de aplicações móveis com Java
26
MIDP
Perfis
31/08/2007
27
Desenvolvimento de aplicações móveis com Java
Perfis
31/08/2007Desenvolvimento de aplicações móveis com Java
28
� Uma coleção de API’s que complementam uma configuração fornecendo ferramentas de interação para o dispositivo;
� O perfil ajuda na portabilidade das aplicações;
Perfis
31/08/2007Desenvolvimento de aplicações móveis com Java
29
� Os perfis existentes para o CLDC são diferentes dos existentes para o CDC;
� Um perfil pode depender da funcionalidade de outro perfil, assim como uma configuração;
Perfis
31/08/2007Desenvolvimento de aplicações móveis com Java
30
� Mobile Information Device Profile (MIDP)� Aplicações em dispositivos wireless sobre a CLDC;
� Foundation Profile� Profile de base para dispositivos em rede sem GUI sobre
CDC;
� Personal Basis, Personal e RMI Profiles� Suporte básico a gráficos e RMI para dispositivos CDC e
Foundation;
Mobile Information Device Profile
31/08/2007Desenvolvimento de aplicações móveis com Java
31
� Foi o primeiro perfil do Java ME;
� É focado em dispositivos implementados com o CLDC;
� É responsável por:� Ferramentasde tela(Display);
� Interaçãocom o usuário;
� Persistênciade dados;
� “Messaging”(SMS, email, etc), segurança e comunicação através da rede wireless;
MIDP 1.0
31/08/2007Desenvolvimento de aplicações móveis com Java
32
� 128 kB de memória não volátil;
� 32 kB para heap;
� 8 kB para persistência de dados;
� Tela de 96x54 pixels;
� Entrada de dados;
� Conexões de rede (intermitentes);
� Segurança – conceito de sandbox das applets;
MIDP 2.0
31/08/2007Desenvolvimento de aplicações móveis com Java
33
� Segurança: baseado em permissões do Java SE;
� Novas API´s para aprimorar o desenvolvimento: � Game API;
� Media API;
� Secure Connection API;
Composição MIDP
31/08/2007Desenvolvimento de aplicações móveis com Java
34
MIDlet
31/08/2007Desenvolvimento de aplicações móveis com Java
35
� Tem que conter pelo menos uma classe derivada do pacote javax.microedition.midlet.MIDlet
� Obrigatoriamente, um número de métodos têm que ser implementados para que sua execução torne-se possível;
� Deve-se que usar somenteas API’s do MIDP para manter sua portabilidade;
MIDlet
31/08/2007Desenvolvimento de aplicações móveis com Java
36
MIDlet
31/08/2007Desenvolvimento de aplicações móveis com Java
37
� Start – Onde é feita a Aquisição de recursos inicializando a execução (startApp);
� Pause – Liberação de recursos em um modo de espera, ou seja, pausado utilizado ao atender telefone, receber SMS dentre outra aplicação (pauseApp);
� Destroy – Liberação de todos os recursos (destroyApp);
Deploy MIDlet
31/08/2007Desenvolvimento de aplicações móveis com Java
38
Distribuição
31/08/2007Desenvolvimento de aplicações móveis com Java
39
� MIDlets precisam ser empacotados corretamente antes de serem enviados a um dispositivo para instalação. A classe principal MIDlet que age como o ponto de entrada principal para o MIDlet, juntamente com as classes que você construiu e quaisquer imagens ou outros arquivos para os quais precisa de acesso em tempo de execução, precisam ser empacotados em um único arquivo JAR.
JAR
31/08/2007Desenvolvimento de aplicações móveis com Java
40
� Um arquivo JAR (Java Archive file) contém a definição de empacotamento dos arquivos que são necessários para rodar a aplicação. Também é provida informação de empacotamento semelhante em outro arquivo chamado Java Aplication Descriptor (ou JAD) que é tratado separadamente do JAR. Um JAR pode conter mais de um MIDlet, neste caso todos os MIDlets devem estar dentro do mesmo MIDlet suite. O arquivo JAR deve conter todos os arquivos que fazem parte de um MIDlet suite
JAD
31/08/2007Desenvolvimento de aplicações móveis com Java
41
Conteúdo de um arquivo JAD
MIDlet-1: Teste, Teste.png, Teste
MIDlet-Jar-Size: 100
MIDlet-Jar-URL: Teste.jar
MIDlet-Name: Teste
MIDlet-Vendor: Unknown
MIDlet-Version: 1.0
MicroEdition-Configuration: CLDC-
1.0
MicroEdition-Profile: MIDP-2.0
Obfuscator
31/08/2007Desenvolvimento de aplicações móveis com Java
42
� Dispositivos móveis possuem memória muito reduzida, e quanto menor sua aplicação for, melhor será para o dispositivo. Para isso usamos o Obfuscator que é usado para diminuir o tamanho dos arquivos eliminando redundância e também para evitar engenharia reversa.
NetBeans
Eclipse
Preparando o Ambiente
31/08/2007
43
Desenvolvimento de aplicações móveis com Java
NetBeans
31/08/2007Desenvolvimento de aplicações móveis com Java
44
� Download e uso gratuitos.
� www.netbeans.org
� É preciso baixar além do NetBeans IDE o Kit para desenvolvimento móvel – Mobility Pack.� O Mobility Pack possui um WTK embutido, não sendo
necessário baixar a instalação separada.
Eclipse
31/08/2007Desenvolvimento de aplicações móveis com Java
45
� Download e uso gratuitos.
� www.eclipse.org
� É preciso baixar além do Eclispse IDE a instalação do WTK e também algum plugin para agilizar e facilitar o desenvolvimento.
Interface com usuário
31/08/2007
46
Desenvolvimento de aplicações móveis com Java
Interface com o usuário
31/08/2007Desenvolvimento de aplicações móveis com Java
47
� As MIDlets devem poder ser executadas em qualquer dispositivo, contendo a VM, sem alterações, porém isso torna bastante difícil a parte de Interface com usuário, pois dispositivos variam de tamanho de tela, cores, teclados, touch-Screens e outros aspectos.
Interface com o usuário
31/08/2007Desenvolvimento de aplicações móveis com Java
48
� As aplicações são desenvolvidas com uma certa abstração de tela, pois os comandos e a inserção de dados são feitos através dos botões do celular, e isto não é sabido previamente. As aplicações descobrem isto em Runtime e se comportam de maneira apropriada a cada celular. Já no desenvolvimento de jogos a aplicação é bem mais específica, pois o desenvolvedor precisa conhecer o dispositivo previamente para melhor aproveitamento de recursos, como disposição em tela por exemplo.
Interface com o usuário
31/08/2007Desenvolvimento de aplicações móveis com Java
49
Temos as classes Screen e Canvas as quais podemos dividir em duas categorias:
� High-level API: engloba a classe Screen e suas heranças, pois são classificados como objetos de Interface.
� Low-level API: engloba a classe Canvas e suas heranças, as quais proporcionam uma área livre para gráficos.
� Game API: específica para o desenvolvimento de jogos
MIDlets e Displays
31/08/2007Desenvolvimento de aplicações móveis com Java
50
� Cada MIDlet possui uma referência a apenas um objeto Display. Este objeto pode obter informação a respeito do display atual, como por exemplo, o total de cores suportadas pelo display do dispositivo. Ele inclui métodos para adicionar objetos Displayable no Display como formulários, caixa de texto, alertas, etc.
Object
Displayjavax.microedition.lcdui
Componentes UI
31/08/2007
51
Desenvolvimento de aplicações móveis com Java
High Level UI
31/08/2007Desenvolvimento de aplicações móveis com Java
52
Pode existir apenas um por tela.
Screen
Form
Alert
TextBox
List
Form
31/08/2007Desenvolvimento de aplicações móveis com Java
53
� Form é uma herança de Screen e Displayable, o qual pode conter mais de um controle de interface chamados Item. Um form tem a mesma função de um Container em AWT/SWING, mas com as limitações da MIDlet é claro, ele serve para poder-se colocar mais de um componente na tela.
Form
31/08/2007Desenvolvimento de aplicações móveis com Java
54
� Apesar de haver rolagem automática quando todos os objetos não cabem na tela, cuidado para não deixar um form muito grande com muitos componentes, pois a rolagem dos forms tende a ser confuso nos dispositivos, pois cada um implementa isso da sua maneira, e por isso não deve se tornar uma prática corriqueira, além de tornar seu aplicativo esteticamente mal feito, pois o usuário muitas vezes não irá saber se há mais objetos a serem preenchidos.
Form
31/08/2007Desenvolvimento de aplicações móveis com Java
55
� Como vimos os forms recebem itens os quais são divididos em diversos tipos cada um com sua finalidade.
� Os itens podem ser adicionados e removidos mesmo com os forms sendo mostrados.
Form
31/08/2007Desenvolvimento de aplicações móveis com Java
56
Métodos do Form.
Lembre-se que o método append adiciona um novo item no final da lista, e o método insert adiciona um item no índice indicado movendo os outros existentes para baixo.
- append(Item item);
- set(int Indice, Item
item);
- insert(int Indice, Item
item);
- delete(int Indice);
Items
31/08/2007Desenvolvimento de aplicações móveis com Java
57
� Como já foi falado existem vários tipos de itens, e cada um com sua determinada função. Esses diversos tipos de itens estendem da classe Item. Esses itens são inseridos em forms, eles podem ou não ter um Label, podem ou não ser mostrados, eles podem ter comandos associados a eles.
Items
31/0
8/2
007
Des
envo
lvim
ento
de
aplic
açõ
es m
óveis co
m Java
58
CustomItem
Spacer
ChoiceGroup
Gauge
DateField
TextField
ImageItem
String Item
Ite
m
Commands
31/08/2007Desenvolvimento de aplicações móveis com Java
59
� Os commands são usados para interação do usuário com a aplicação. Sua aplicação básica é na troca de Displayables, os quais são acionados por elementos reais do dispositivo, que podem ser: softkeys, itens de menu, botões e dispositivos de acionamento.
� Esses commands são entidades abstratas e podem ser adicionados arbitrariamente para cada elemento Screen ou Canvas.
Commands
31/08/2007Desenvolvimento de aplicações móveis com Java
60
Os commands tem três propriedades:
� Label: texto mostrado ao usuário na interface;
� Type: tipo do comando;
� Priority: prioridade dos comandos que são utilizados para mostrar os comandos mais utilizados com maior facilidade.
Command(String Label, int Type, int Priority);
Ex:
comandoSair = new Command( Sair , Command.EXIT, 1);
Menu options
31/08/2007Desenvolvimento de aplicações móveis com Java
61
� Os commands são geralmente relacionados a SoftKeys ou SoftButtons, que são botões existentes nos celulares os quais são usados para menus, e navegação em geral, sem uma função única. Geralmente possui-se dois botões de SoftKeys, porém isso não significa que você precisa só ter dois commands sendo implementados, pois se houver mais commands que botões eles são agrupados e é aberto um menu. Para isso que serve a prioridade setada nos botões, ou seja, a prioridade 1 (mais prioritário) indica que esse command deve ser mostrado nas softKeys, ou em primeiro lugar no menu.
Tipos de Commands
31/08/2007Desenvolvimento de aplicações móveis com Java
62
� Busque sempre a utilização correta dos tipos de Commands (Command.SCREEN, Command.EXIT, Command.OK, Command.BACK, etc), pois é em runtime que eles irão definir o local apropriado para se posicionarem na tela. Por exemplo, se um command é setado com o tipo EXIT, ele vai ficar onde normalmente fica os comandos de Exit do próprio celular.
CommandListener
31/08/2007Desenvolvimento de aplicações móveis com Java
63
� O tratamento dos commands é feito com o pattern de Listeners ( Observer), ou seja, comandos são adicionados a Displayables, cada displayable pode possuir apenas um CommandListener o qual éinvocado assim que um command é acionado.
public void
setCommandListener(CommandListener)
Exemplos
31/08/2007
64
Desenvolvimento de aplicações móveis com Java
TextField
31/08/2007Desenvolvimento de aplicações móveis com Java
65
� É uma string editável, ou melhor exemplificando um campo para preencher.Para este item existem os métodos de manipulação:� getString();
� setString();
� Construtor:� TextField(String Label, String Text, int
TamMax, int Constraints)
� Possui constraints: ANY, PASSWORD, EMAILADDR, NUMERIC,PHONENUMBER, URL.
ChoiceGroup
31/08/2007Desenvolvimento de aplicações móveis com Java
66
� É uma lista de escolhas semelhante a List, ambos implementam a interface Choice. Os tipos de listas são Exclusive e Multiple, porém não tem o tipo Implicit. Já na MIDP 2.0 é implementado o tipo POPUP, que deixa a lista semelhante a um menu DropDown.
StringItem
31/08/2007Desenvolvimento de aplicações móveis com Java
67
� É um simples Label com um texto. Ex: “Código: 1”, onde “Codigo” é a parte Label, e “1” é a parte Texto.
� Para este Item, existem os métodos de manipulação: getLabel(), setLabel(), getText(), setText();� StringItem( “Label:” , “Text” );
ImageItem
31/08/2007Desenvolvimento de aplicações móveis com Java
68
� Mostra a instância de uma Imagem dentro de um form, ou seja, você precisa já de um objeto Image. Este item possui um label, um texto alternativo e pode ser posicionado segundo um layout.
� ImageItem(String Label, Image imagem, int Layout, String texto_alt);
ImageItem
31/08/2007Desenvolvimento de aplicações móveis com Java
69
� Os layouts são constantes da classe, e podem ser:� LAYOUT_DEFAULT, LAYOUT_LEFT, LAYOUT_CENTER,
LAYOUT_RIGHT, LAYOUT_NEWLINE_BEFORE*, LAYOUT_NEWLINE_AFTER*.
� *somente existentes no MIDP 2.0
ImageItem
31/08/2007Desenvolvimento de aplicações móveis com Java
70
� Exemplo
Image img = new Image.createImage(“/foto.png”);
ImageItem imgItem = new ImageItem(“Foto”, img,
ImageItem.LAYOUT_DEFAULT, “Alt Text” );
form.append(imgItem);
DateField
31/08/2007Desenvolvimento de aplicações móveis com Java
71
� É uma interface usada para datas, horas ou ambos, como irá aparecer é por conta do Celular e o programador não tem controle sobre isso. No construtor deve ser especificado a Label e o tipo de dado, que pode ser:� DateField.DATE
� DateField.TIME
� DateField.DATE_TIME
Gauge
31/08/2007Desenvolvimento de aplicações móveis com Java
72
� É uma representação gráfica de um valor inteiro, e como ele será mostrado depende da implementação de cada aparelho. Existem dois tipos de gauges, o interativo, que permite a ação do usuário sobre seu valor, e não interativo controlado somente pelo programa. Os valores podem ser alterados em tempo de execução, pelos comandos getMaxValue(), setMaxValue(); setValue(), getValue().
List
31/08/2007Desenvolvimento de aplicações móveis com Java
73
� Como o próprio nome diz são listas, as quais permitem ao usuário selecionar itens (elements) de uma lista. Esses elementos podem ser representados tanto por Strings quanto por Imagens.
List
31/08/2007Desenvolvimento de aplicações móveis com Java
74
� Existem três tipos de listas, Implicit, Exclusive e Multiple. Implicit deixa você escolher uma opção e clicar no botão padrão de seleção ou em um command que você adicionar. Exclusive, que lembra uma lista de Radio, permite somente a seleção de uma opção e para seleciona-la deve-se usar um botão com um Command setado. E ainda tem a list Multiple, que funciona como uma CheckList, que nos permite selecionar várias opções.
Tipos de List
31/08/2007Desenvolvimento de aplicações móveis com Java
75
� Quando é selecionado um item em uma lista Implicit, o método CommandAction é chamado, sendo que para esta List já foi anteriormente adicionando um CommandListener.
� Existem duas sobrecargas para este construtor, no qual você pode iniciar os Arrays de elementos e de Imagens ou não. O array de elementos, se utilizado, não poderá ser nulo, mas poderá conter elementos nulos, os quais aparecerão em branco na tela.
Métodos de List
31/08/2007Desenvolvimento de aplicações móveis com Java
76
� Quando uma lista tornar-se grande demais para a tela, será criado uma rolagem, a qual não cabe a nós implementa-la, ela é por conta da VM.
� Cada elemento da list possui um índice. Esse índice inicia em 0. Para editar uma list, existem alguns métodos que valem a pena ser comentados aqui.
Métodos de List
31/08/2007Desenvolvimento de aplicações móveis com Java
77
� set() : altera o elemento do qual o índice foi fornecido;
� insert() : insere um elemento em uma posição indicada por um índice. Se este índice estiver no meio da lista, ele força os outros elementos uma posição à frente;
� append() : inclui um elemento ao final da lista;
� delete() : remove o elemento indicado pelo índice;
Métodos de List
31/08/2007Desenvolvimento de aplicações móveis com Java
78
� Dois métodos bastante utilizados que valem a pena ser comentados são:� public boolean isSelected(int indice): que me diz
se o índice esta selecionado atualmente.
� public int getSelectedIndex(): que me retorna o índice que foi escolhido, somente para listas Implicit e Exclusive.
TextBox
31/08/2007Desenvolvimento de aplicações móveis com Java
79
� É um componente básico que serve para entrada de texto(string) em celulares.
� O construtor de um TextBox é:� public TextBox(String titulo, String texto, int
tam_Max, int constraints);
Alert
31/08/2007Desenvolvimento de aplicações móveis com Java
80
� Um alert nada mais é que uma mensagem informativa ao usuário, tem a mesma idéia de um alert de javascript, ou VB, ou qualquer outra linguagem, ou seja, ele é basicamente uma telinha que mostra uma mensagem e logo depois sai da tela.
Alert
31/08/2007Desenvolvimento de aplicações móveis com Java
81
� Esses alerts podem ser tanto Timed Alerts, ou Modal Alert. No Timed Alert, você pode setar um tempo ou não o qual receberá o tempo padrão do aparelho. E o alerta modal que aparece e fica esperando uma intervenção do usuário, e possui vários tipos, como Alarm, Confirmation, Error, Info, Warning, cada qual com seu ícone e som, os quais também podem ser setados pelo desenvolvedor.
Alert
31/08/2007Desenvolvimento de aplicações móveis com Java
82
� Construtores� public Alert(String titulo, String texto, Image
icone, AlertType tipo)
� public Alert(String titulo)
� Alerts são criados com um tempo default para desaparecer, tempo qual é implementado na VM, e pode ser obtido por getDefaultTimeout(), e também configurado por setTimeout(). Quando criamos um Timed Alert, podemos transforma-lo em modal adicionando ao parâmetro AlertType para Alert.FOREVER.
Alert
31/08/2007Desenvolvimento de aplicações móveis com Java
83
� ExemploAlert alerta;
alerta = new Alert(“Alerta”,“Acesso não
autorizado.”, null, null);
alerta.setTimeout(5000);// timeout para 5
segundos
Ticker
31/08/2007Desenvolvimento de aplicações móveis com Java
84
� Ticker nada mais é que um texto que corre no topo da tela, semelhante as tickers de mercados de ações, e semelhante ao <marquee> de html. O recurso de Ticker serve para algum texto informativo que possa ser importante, ficar lembrando toda hora, ou algo de enfeite que você queira colocar. Mas lembre-se, a tela do celular jáé pequena para sua aplicação, e o ticker tomara mais uma linha para si, a qual não poderá ser usada. Sua criação é simples.
Ticker
31/08/2007Desenvolvimento de aplicações móveis com Java
85
� Exemplo:� Ticker ticker = new Ticker(“Esta mensagem deve
passar na tela”);
� E os métodos para manuseio dessas Tickers não poderiam ser outros senão:� public void setTicker(Ticker ticker)
� public Ticker getTicker
Outros Listeners
31/08/2007Desenvolvimento de aplicações móveis com Java
86
� Existem ainda outros dois listeners que podem ser usados:� ItemCommandListener: serve para tratar eventos de
Commands de um item especifíco. Deve implementar o método commandAction(Command c, Item item);
� ItemStateListener: serve para tratar eventos de mudanças no estado interno de um Item. Deve implementar o método itemStateChanged(Item item);
Exemplos
31/08/2007
87
Desenvolvimento de aplicações móveis com Java
Low Level UI
31/08/2007Desenvolvimento de aplicações móveis com Java
88
Displayable
Canvas
javax.microedition.lcdui
Canvas
31/08/2007Desenvolvimento de aplicações móveis com Java
89
� Componentes de interface MIDP não são adequados para jogos e gráficos;
� Possuem também limitações quanto à amostragem de dados e usuabilidade;
� A classe Canvas fornece acesso de baixo nível àtela do dispositivo e recursos de entrada de dados;
� Capturar diretamente entrada de dados do usuário e definir a tela de acordo;
� Game API na MIDP 2.0;
Canvas
31/08/2007Desenvolvimento de aplicações móveis com Java
90
� Coração da API gráfica de baixo nível� Herda de Displayable e é tratada como tal
� Para utilizá-la, é necessário criar uma herança
� Contém métodos para manipulação de eventos
� Um único método é abstrado, exigindo implementação: paint();
Canvas
31/08/2007Desenvolvimento de aplicações móveis com Java
91
� É possível buscar informações sobre o Canvas e a tela do dispositivo:� getWidth()
� getHeight()
� Canvas geralmente deixa uma porção da tela para uso do dispositivo e comandos, mas no MIDP 2.0 é possível configurar um Canvas para ocupar toda a tela� setFullScreenMode(boolean)
Canvas
31/08/2007Desenvolvimento de aplicações móveis com Java
92
� O método paint() é semelhante aos da AWT ou Swing� Dentro do paint() colocamos código para desenhar
formas, linhas, imagens, etc.
Canvas
31/08/2007Desenvolvimento de aplicações móveis com Java
93
� Exemplo
public class MeuCanvas extends
Canvas {
public void paint(Graphics g) {
// desenha alguma coisa
}
}
Canvas
31/08/2007Desenvolvimento de aplicações móveis com Java
94
� Invocação de repaint() não invoca diretamente o paint()� Somente sinaliza a implementação MIDP que a tela
deve ser redesenhada
� O método serviceRepaints() de Canvas executa todos os repaints pendentes� Não retorna enquanto todos não foram executados
Canvas
31/08/2007Desenvolvimento de aplicações móveis com Java
95
� Coordenadas iniciam no canto superior esquerdo (x,y). Métodos (cllase Graphics):� drawLine(x1, y1, x2, y2)
� drawRect(x, y, larg, alt)
� fillRect(x, y, larg, alt);
� fillArc(x, y, larg, alt, anguloInicio,
anguloArco)
Canvas
31/08/2007Desenvolvimento de aplicações móveis com Java
96
� As linhas e contornos podem utilizar dois estilos:� Graphics.SOLID
� Graphics.DOTTED
� A implementação MIDP é livre para escolher como vai se comportar o estilo DOTTED
Canvas
31/08/2007Desenvolvimento de aplicações móveis com Java
97
� Representadas como combinações de vermelho, verde e azul (RGB)� setColor(int RGB) – 0xRRGGBB
� setColor(int red, int green, int blue)
� Dispositivos possuem diferentes níveis de suporte e cores� Desde preto e branco até cores de 24 bits
� Métodos isColor() e numColors() da classe Display auxiliam a determinar a capacidade da tela atual
Canvas
31/08/2007Desenvolvimento de aplicações móveis com Java
98
� Para dispositivos de escala de cinza� setGrayScale(int grayScale)
� Entre 0 e 255
� Em escala de cinza, os valores de red, green e blue são iguais
� Eventualmente, dispositivos de escala de cinza podem retornar true no método isColor()
Canvas
31/08/2007Desenvolvimento de aplicações móveis com Java
99
� Baseado em pontos de ancoragem� Pontos de localização do texto
� TOP, BASELINE, BOTTON
� LEFT, HCENTER, RIGHT
� A coordenada x,y de desenho será baseada nesse ponto de ancoragem� TOP | LEFT, BOTTOM | HCENTER, etc
� Métodos:� drawChar(char caracter, x, y, ancora)
� drawString(String, x, y, ancora)
Canvas
31/08/2007Desenvolvimento de aplicações móveis com Java
100
� Fontes são representadas por face, estilo e tamanho� Faces:� Font.FACE_SYSTEM, Font.FACE_MONOSPACE,
Font.FACE_PROPORTIONAL
� Estilos:� Font.STYLE_PLAIN, Font.STYLE_BOLD, Font.STYLE_ITALIC,
Font.STYLE_UNDERLINE
� Tamanhos:� Font.SIZE_SMALL, Font.SIZE_MEDIUM, Font.SIZE_LARGE
� Estilos podem ser combinados com or ( | )
Canvas
31/08/2007Desenvolvimento de aplicações móveis com Java
101
� Apesar de Commands poderem ser usados em Canvas, é possível capturar eventos em nível mais baixo
� Captura direta de teclas ou controles de direcionamento
� Captura de eventos de apontadores em telas touch screen (canetas, dedos), caso exista
Canvas
31/08/2007Desenvolvimento de aplicações móveis com Java
102
� Métodos a serem implementados no Canvas:� keyPressed(int keyCode)
� keyReleased(int keyCode)
� É retornado um inteiro representando a tecla acionada� Constantes da classe Graphics
� KEY_NUM0 até KEY_NUM9, KEY_STAR, KEY_POUND
� Dispositivos podem ter mais teclas, que retornam valores não mapeados em Graphics
Canvas
31/08/2007Desenvolvimento de aplicações móveis com Java
103
� Ações mais específicas para jogos e controles de direção
� Mapeadas de forma abstrata para cada dispositivo
� Transformar KeyCode em GameAction� getGameAction(int keyCode)
� Constantes (de Graphics)� UP, DOWN, LEFT, RIGHT, FIRE, GAME_A, GAME_B,
GAME_C, GAME_D
Canvas
31/08/2007Desenvolvimento de aplicações móveis com Java
104
� Verificar de dispositivo suporta apontadores� hasPointerEvents()
� hasPointerMotionEvents()
� Eventos:� pointerPressed(x,y)
� pointerReleased(x,y)
� pointerDragged(x,y) – enquanto está sendo
arrastado
Exemplos
31/08/2007
105
Desenvolvimento de aplicações móveis com Java
RMS – Record Manager System
31/08/2007
106
Desenvolvimento de aplicações móveis com Java
RMS
31/08/2007Desenvolvimento de aplicações móveis com Java
107
� Abordagem abstrata� Dispositivo deve oferecer algum tipo de
armazenamento
� Flash ROM, RAM com baterias e etc.
� Qualquer tipo de armazenamento é tratado da mesma maneira
� Pequenas quantidades de dados� MIDP exige um mínimo de 8Kb
Armazenamento de Dados
31/08/2007Desenvolvimento de aplicações móveis com Java
108
� Baseado em Record Stores� Conjunto de registros (Record)
� Instâncias de javax.microedition.rms.RecordStore
� Em MIDP 1.0, todas as MIDlets da suite podem acessar seus RecordStores
� Em MIDP 2.0, um RecordStore pode ser compartilhado por todas as MIDlets de um dispositivo
RecordStore
31/08/2007Desenvolvimento de aplicações móveis com Java
109
� Identificados por um nome que deve ser único
� Para abrir um, basta fornecer o seu nome� public static RecordStore openRecordStore(String nome,
boolean, criarSeNecessário)
� Lança RecordStoreExcetion
� RecordStoreFullException
� RecordStoreNotFoundException
� Se o RecordStore não existir, será criado, dependendo do valor de criarSeNecessário
Abrir e Fechar RecordStore
31/08/2007Desenvolvimento de aplicações móveis com Java
110
� Para abrir um RS chamado “Address”� RecordStore rs =
RecordStore.openRecordStore(“Address”,true);
� Para fechar um RS, é utilizado o método closeRecordStore()� É interessante fechar os RS assim que possível, devido
às exigências de economia de memória nos dispositivos
� O método pauseApp() também deve fechar os RS abertos, se possível
Listar e Remover
31/08/2007Desenvolvimento de aplicações móveis com Java
111
� Para listar todos os RSs disponíveis para um MIDlet suite:� public static String[] listRecordStores()
� Para remover um RS:� public static deleteRecordStore(String nome)
Tamanho
31/08/2007Desenvolvimento de aplicações móveis com Java
112
� Para ler o tamanho em bytes do RS� public int getSize()
� Para verificar o espaço disponível para o RS:� public int getSizeAvailable()
� As implementações em geral acrescentam algum overhead ao armazenamento de dados
Manipulando Registros
31/08/2007Desenvolvimento de aplicações móveis com Java
113
Inserindo Registros
31/08/2007Desenvolvimento de aplicações móveis com Java
114
� Método:� public int addRecord(byte[] dados, int offset,
int numBytes)
� Exemplo:String = “Isto é um registro”
byte[] dados = registro.getBytes();
int id = rs.addRecord(dados, 0, dados.length);
Lendo Registros
31/08/2007Desenvolvimento de aplicações móveis com Java
115
� O registro é lido baseado no seu ID� public byte[] getRecord(int recordID)
� Insere os dados em um novo array� public int getRecord(int recordId, byte[]
buffer, int offset)
� Insere os dados em um array já existente, no offset indicado
� Tamanho do record pode ser obtido por getRecordSize()
Alterando e Removendo Registros
31/08/2007Desenvolvimento de aplicações móveis com Java
116
� Alteração do registro por inteiro� public void setRecord(int ID, byte[] dados, int
offset, int numBytes)
� Remoção via RecordID� public void deleteRecord(int ID)
Exemplos
31/08/2007
117
Desenvolvimento de aplicações móveis com Java
SCMAD
Certificação
31/08/2007
118
Desenvolvimento de aplicações móveis com Java
SCMAD
31/08/2007Desenvolvimento de aplicações móveis com Java
119
� Profissional deve possuir certificação SCJP� Objetivos da prova:
� Java Technology for the Wireless Industry specification (JSR-185) - ttp://java.sun.com/products/jtwi/
� CLDC (1.0 / 1.1) - ttp://java.sun.com/products/cldc� Security (both CLDC and MIDP): pacote pki entre outros.� Networking: limitações de HTTP, etc.� Modelo de aplicação, deploy, ciclo de vida� Persistência com MIDP� Interface visual com Usuário MIDP� MIDP Game API � Media using MIDP 2.0 and the Mobile Media API 1.1 (MMAPI) � Wireless Messaging API 1.1 (WMA)
Futuro e Tendências
31/08/2007
120
Desenvolvimento de aplicações móveis com Java
Location API
31/08/2007Desenvolvimento de aplicações móveis com Java
121
JSR 179
Payment API
31/08/2007Desenvolvimento de aplicações móveis com Java
122
JSR 229
Internationalization API
31/08/2007Desenvolvimento de aplicações móveis com Java
123
JSR 238
Exemplos
31/08/2007
124
Desenvolvimento de aplicações móveis com Java
HelloWorld
31/08/2007Desenvolvimento de aplicações móveis com Java
125
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;
public class HelloWorld extends MIDlet {
protected void startApp() throws MIDletStateChangeException {}
protected void pauseApp() {}
protected void destroyApp(boolean arg0) throws MIDletStateChangeException {}
}
Ambiente de Desenvolvimento
31/08/2007Desenvolvimento de aplicações móveis com Java
126
� É preciso ter instalado:� JDK;
� WTK;
� IDE ou Editor para os códigos:� Eclipse + EclipseME
� NetBeans + Mobility Pack;
� Gel;
� JBuilder;
Referências
31/08/2007Desenvolvimento de aplicações móveis com Java
127
� Tutorial, Apostila e Forum de Java Me do Portal Java� www.portaljava.com
� GUJ� www.guj.com.br
� Sun� http://java.sun.com/javame
� Java.net� https://mobileandembedded.dev.java.net
ESJUG, Participe
31/08/2007Desenvolvimento de aplicações móveis com Java
128
� https://esjug.dev.java.net
That’s all folks!
31/08/2007Desenvolvimento de aplicações móveis com Java
129
� Muito Obrigado a todos;
� Contatos:
� Paulo César M. Jeveaux (Jevô)
� [email protected] / [email protected]
� www.portaljava.com / www.jeveaux.com
Desenvolvimento de aplicações móveis com Java
por Paulo César M. Jeveaux