tutorial: desenvolvimento de aplicacoes moveis com java

Post on 22-Apr-2015

25.122 Views

Category:

Technology

0 Downloads

Preview:

Click to see full reader

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

� jeveaux@portaljava.com / paulo@jeveaux.com

� www.portaljava.com / www.jeveaux.com

Desenvolvimento de aplicações móveis com Java

por Paulo César M. Jeveaux

top related