tutorial: desenvolvimento de aplicacoes moveis com java

130
Desenvolvimento de aplicações móveis com Java por Paulo César M. Jeveaux

Upload: paulo-cesar-m-jeveaux

Post on 22-Apr-2015

25.122 views

Category:

Technology


0 download

DESCRIPTION

 

TRANSCRIPT

Page 1: Tutorial: Desenvolvimento de aplicacoes moveis com Java

Desenvolvimento de aplicações móveis com Java

por Paulo César M. Jeveaux

Page 2: Tutorial: Desenvolvimento de aplicacoes moveis com Java

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

Page 3: Tutorial: Desenvolvimento de aplicacoes moveis 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.

Page 4: Tutorial: Desenvolvimento de aplicacoes moveis com Java

Por que desenvolver para celulares?

Apresentação

31/08/2007

4

Desenvolvimento de aplicações móveis com Java

Page 5: Tutorial: Desenvolvimento de aplicacoes moveis 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

Page 6: Tutorial: Desenvolvimento de aplicacoes moveis 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

Page 7: Tutorial: Desenvolvimento de aplicacoes moveis com Java

Por que usar Java ME?

31/08/2007

7

Desenvolvimento de aplicações móveis com Java

Page 8: Tutorial: Desenvolvimento de aplicacoes moveis 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;

Page 9: Tutorial: Desenvolvimento de aplicacoes moveis com Java

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.

Page 10: Tutorial: Desenvolvimento de aplicacoes moveis com Java

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

Page 11: Tutorial: Desenvolvimento de aplicacoes moveis com Java

O que é Java ME

31/08/2007

11

Desenvolvimento de aplicações móveis com Java

Page 12: Tutorial: Desenvolvimento de aplicacoes moveis 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

Page 13: Tutorial: Desenvolvimento de aplicacoes moveis com Java

Arquitetura

31/08/2007

13

Desenvolvimento de aplicações móveis com Java

Page 14: Tutorial: Desenvolvimento de aplicacoes moveis com Java

Arquitetura

31/08/2007Desenvolvimento de aplicações móveis com Java

14

Java

Page 15: Tutorial: Desenvolvimento de aplicacoes moveis com 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

Page 16: Tutorial: Desenvolvimento de aplicacoes moveis 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.

Page 17: Tutorial: Desenvolvimento de aplicacoes moveis com Java

Wireless Toolkit

WTK

31/08/2007

17

Desenvolvimento de aplicações móveis com Java

Page 18: Tutorial: Desenvolvimento de aplicacoes moveis 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;

Page 19: Tutorial: Desenvolvimento de aplicacoes moveis com Java

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

Page 20: Tutorial: Desenvolvimento de aplicacoes moveis com Java

WTK

31/08/2007Desenvolvimento de aplicações móveis com Java

20

KToolBar

OTA Provising (Over The Air)

Page 21: Tutorial: Desenvolvimento de aplicacoes moveis com Java

CDC

CLDC

Configurações

31/08/2007

21

Desenvolvimento de aplicações móveis com Java

Page 22: Tutorial: Desenvolvimento de aplicacoes moveis 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)

Page 23: Tutorial: Desenvolvimento de aplicacoes moveis com Java

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.);

Page 24: Tutorial: Desenvolvimento de aplicacoes moveis com Java

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

Page 25: Tutorial: Desenvolvimento de aplicacoes moveis com Java

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;

Page 26: Tutorial: Desenvolvimento de aplicacoes moveis com Java

Configurações e Perfis

31/08/2007Desenvolvimento de aplicações móveis com Java

26

Page 27: Tutorial: Desenvolvimento de aplicacoes moveis com Java

MIDP

Perfis

31/08/2007

27

Desenvolvimento de aplicações móveis com Java

Page 28: Tutorial: Desenvolvimento de aplicacoes moveis 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;

Page 29: Tutorial: Desenvolvimento de aplicacoes moveis com Java

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;

Page 30: Tutorial: Desenvolvimento de aplicacoes moveis com Java

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;

Page 31: Tutorial: Desenvolvimento de aplicacoes moveis com Java

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;

Page 32: Tutorial: Desenvolvimento de aplicacoes moveis com Java

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;

Page 33: Tutorial: Desenvolvimento de aplicacoes moveis com Java

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;

Page 34: Tutorial: Desenvolvimento de aplicacoes moveis com Java

Composição MIDP

31/08/2007Desenvolvimento de aplicações móveis com Java

34

Page 35: Tutorial: Desenvolvimento de aplicacoes moveis com Java

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;

Page 36: Tutorial: Desenvolvimento de aplicacoes moveis com Java

MIDlet

31/08/2007Desenvolvimento de aplicações móveis com Java

36

Page 37: Tutorial: Desenvolvimento de aplicacoes moveis com Java

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);

Page 38: Tutorial: Desenvolvimento de aplicacoes moveis com Java

Deploy MIDlet

31/08/2007Desenvolvimento de aplicações móveis com Java

38

Page 39: Tutorial: Desenvolvimento de aplicacoes moveis com Java

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.

Page 40: Tutorial: Desenvolvimento de aplicacoes moveis com Java

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

Page 41: Tutorial: Desenvolvimento de aplicacoes moveis com Java

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

Page 42: Tutorial: Desenvolvimento de aplicacoes moveis com Java

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.

Page 43: Tutorial: Desenvolvimento de aplicacoes moveis com Java

NetBeans

Eclipse

Preparando o Ambiente

31/08/2007

43

Desenvolvimento de aplicações móveis com Java

Page 44: Tutorial: Desenvolvimento de aplicacoes moveis 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.

Page 45: Tutorial: Desenvolvimento de aplicacoes moveis com Java

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.

Page 46: Tutorial: Desenvolvimento de aplicacoes moveis com Java

Interface com usuário

31/08/2007

46

Desenvolvimento de aplicações móveis com Java

Page 47: Tutorial: Desenvolvimento de aplicacoes moveis 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.

Page 48: Tutorial: Desenvolvimento de aplicacoes moveis com Java

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.

Page 49: Tutorial: Desenvolvimento de aplicacoes moveis com Java

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

Page 50: Tutorial: Desenvolvimento de aplicacoes moveis com Java

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

Page 51: Tutorial: Desenvolvimento de aplicacoes moveis com Java

Componentes UI

31/08/2007

51

Desenvolvimento de aplicações móveis com Java

Page 52: Tutorial: Desenvolvimento de aplicacoes moveis 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

Page 53: Tutorial: Desenvolvimento de aplicacoes moveis com Java

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.

Page 54: Tutorial: Desenvolvimento de aplicacoes moveis com Java

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.

Page 55: Tutorial: Desenvolvimento de aplicacoes moveis com Java

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.

Page 56: Tutorial: Desenvolvimento de aplicacoes moveis com Java

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);

Page 57: Tutorial: Desenvolvimento de aplicacoes moveis com Java

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.

Page 58: Tutorial: Desenvolvimento de aplicacoes moveis com Java

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

Page 59: Tutorial: Desenvolvimento de aplicacoes moveis com Java

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.

Page 60: Tutorial: Desenvolvimento de aplicacoes moveis com Java

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);

Page 61: Tutorial: Desenvolvimento de aplicacoes moveis com Java

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.

Page 62: Tutorial: Desenvolvimento de aplicacoes moveis com Java

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.

Page 63: Tutorial: Desenvolvimento de aplicacoes moveis com Java

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)

Page 64: Tutorial: Desenvolvimento de aplicacoes moveis com Java

Exemplos

31/08/2007

64

Desenvolvimento de aplicações móveis com Java

Page 65: Tutorial: Desenvolvimento de aplicacoes moveis 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.

Page 66: Tutorial: Desenvolvimento de aplicacoes moveis com Java

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.

Page 67: Tutorial: Desenvolvimento de aplicacoes moveis com Java

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” );

Page 68: Tutorial: Desenvolvimento de aplicacoes moveis com Java

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);

Page 69: Tutorial: Desenvolvimento de aplicacoes moveis com Java

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

Page 70: Tutorial: Desenvolvimento de aplicacoes moveis com Java

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);

Page 71: Tutorial: Desenvolvimento de aplicacoes moveis com Java

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

Page 72: Tutorial: Desenvolvimento de aplicacoes moveis com Java

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().

Page 73: Tutorial: Desenvolvimento de aplicacoes moveis com Java

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.

Page 74: Tutorial: Desenvolvimento de aplicacoes moveis com Java

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.

Page 75: Tutorial: Desenvolvimento de aplicacoes moveis com Java

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.

Page 76: Tutorial: Desenvolvimento de aplicacoes moveis com Java

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.

Page 77: Tutorial: Desenvolvimento de aplicacoes moveis com Java

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;

Page 78: Tutorial: Desenvolvimento de aplicacoes moveis com Java

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.

Page 79: Tutorial: Desenvolvimento de aplicacoes moveis com Java

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);

Page 80: Tutorial: Desenvolvimento de aplicacoes moveis com Java

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.

Page 81: Tutorial: Desenvolvimento de aplicacoes moveis com Java

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.

Page 82: Tutorial: Desenvolvimento de aplicacoes moveis com Java

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.

Page 83: Tutorial: Desenvolvimento de aplicacoes moveis com Java

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

Page 84: Tutorial: Desenvolvimento de aplicacoes moveis com Java

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.

Page 85: Tutorial: Desenvolvimento de aplicacoes moveis com Java

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

Page 86: Tutorial: Desenvolvimento de aplicacoes moveis com Java

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);

Page 87: Tutorial: Desenvolvimento de aplicacoes moveis com Java

Exemplos

31/08/2007

87

Desenvolvimento de aplicações móveis com Java

Page 88: Tutorial: Desenvolvimento de aplicacoes moveis com Java

Low Level UI

31/08/2007Desenvolvimento de aplicações móveis com Java

88

Displayable

Canvas

javax.microedition.lcdui

Page 89: Tutorial: Desenvolvimento de aplicacoes moveis com Java

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;

Page 90: Tutorial: Desenvolvimento de aplicacoes moveis com Java

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();

Page 91: Tutorial: Desenvolvimento de aplicacoes moveis com Java

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)

Page 92: Tutorial: Desenvolvimento de aplicacoes moveis com Java

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.

Page 93: Tutorial: Desenvolvimento de aplicacoes moveis com Java

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

}

}

Page 94: Tutorial: Desenvolvimento de aplicacoes moveis com Java

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

Page 95: Tutorial: Desenvolvimento de aplicacoes moveis com Java

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)

Page 96: Tutorial: Desenvolvimento de aplicacoes moveis com Java

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

Page 97: Tutorial: Desenvolvimento de aplicacoes moveis com Java

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

Page 98: Tutorial: Desenvolvimento de aplicacoes moveis com Java

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()

Page 99: Tutorial: Desenvolvimento de aplicacoes moveis com Java

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)

Page 100: Tutorial: Desenvolvimento de aplicacoes moveis com Java

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 ( | )

Page 101: Tutorial: Desenvolvimento de aplicacoes moveis com Java

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

Page 102: Tutorial: Desenvolvimento de aplicacoes moveis com Java

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

Page 103: Tutorial: Desenvolvimento de aplicacoes moveis com Java

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

Page 104: Tutorial: Desenvolvimento de aplicacoes moveis com Java

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

Page 105: Tutorial: Desenvolvimento de aplicacoes moveis com Java

Exemplos

31/08/2007

105

Desenvolvimento de aplicações móveis com Java

Page 106: Tutorial: Desenvolvimento de aplicacoes moveis com Java

RMS – Record Manager System

31/08/2007

106

Desenvolvimento de aplicações móveis com Java

Page 107: Tutorial: Desenvolvimento de aplicacoes moveis 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

Page 108: Tutorial: Desenvolvimento de aplicacoes moveis com Java

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

Page 109: Tutorial: Desenvolvimento de aplicacoes moveis com Java

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

Page 110: Tutorial: Desenvolvimento de aplicacoes moveis com Java

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

Page 111: Tutorial: Desenvolvimento de aplicacoes moveis com Java

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)

Page 112: Tutorial: Desenvolvimento de aplicacoes moveis com Java

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

Page 113: Tutorial: Desenvolvimento de aplicacoes moveis com Java

Manipulando Registros

31/08/2007Desenvolvimento de aplicações móveis com Java

113

Page 114: Tutorial: Desenvolvimento de aplicacoes moveis com Java

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);

Page 115: Tutorial: Desenvolvimento de aplicacoes moveis com Java

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()

Page 116: Tutorial: Desenvolvimento de aplicacoes moveis com Java

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)

Page 117: Tutorial: Desenvolvimento de aplicacoes moveis com Java

Exemplos

31/08/2007

117

Desenvolvimento de aplicações móveis com Java

Page 118: Tutorial: Desenvolvimento de aplicacoes moveis com Java

SCMAD

Certificação

31/08/2007

118

Desenvolvimento de aplicações móveis com Java

Page 119: Tutorial: Desenvolvimento de aplicacoes moveis 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)

Page 120: Tutorial: Desenvolvimento de aplicacoes moveis com Java

Futuro e Tendências

31/08/2007

120

Desenvolvimento de aplicações móveis com Java

Page 121: Tutorial: Desenvolvimento de aplicacoes moveis com Java

Location API

31/08/2007Desenvolvimento de aplicações móveis com Java

121

JSR 179

Page 122: Tutorial: Desenvolvimento de aplicacoes moveis com Java

Payment API

31/08/2007Desenvolvimento de aplicações móveis com Java

122

JSR 229

Page 123: Tutorial: Desenvolvimento de aplicacoes moveis com Java

Internationalization API

31/08/2007Desenvolvimento de aplicações móveis com Java

123

JSR 238

Page 124: Tutorial: Desenvolvimento de aplicacoes moveis com Java

Exemplos

31/08/2007

124

Desenvolvimento de aplicações móveis com Java

Page 125: Tutorial: Desenvolvimento de aplicacoes moveis 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 {}

}

Page 126: Tutorial: Desenvolvimento de aplicacoes moveis com Java

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;

Page 127: Tutorial: Desenvolvimento de aplicacoes moveis com Java

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

Page 128: Tutorial: Desenvolvimento de aplicacoes moveis com Java

ESJUG, Participe

31/08/2007Desenvolvimento de aplicações móveis com Java

128

� https://esjug.dev.java.net

Page 129: Tutorial: Desenvolvimento de aplicacoes moveis com Java

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

Page 130: Tutorial: Desenvolvimento de aplicacoes moveis com Java

Desenvolvimento de aplicações móveis com Java

por Paulo César M. Jeveaux