73
Programa Expresso de Capacitação Módulo J2ME Aula 7 – MIDP 2.0

Programa Expresso de Capacitação Módulo J2ME Aula 7 – MIDP 2.0

Embed Size (px)

Citation preview

Page 1: Programa Expresso de Capacitação Módulo J2ME Aula 7 – MIDP 2.0

Programa Expresso de CapacitaçãoMódulo J2ME

Aula 7 – MIDP 2.0

Page 2: Programa Expresso de Capacitação Módulo J2ME Aula 7 – MIDP 2.0

Pausa para reflexão

"Sem esforço não há progresso, mas com esforço também não há progresso”

Ryotan Tokuda, Mestre Zen

Page 3: Programa Expresso de Capacitação Módulo J2ME Aula 7 – MIDP 2.0

Agenda

• MIDP 2.0 Technical Overview

• MIDP Desenvolvimento e Deployment

• API´s

• Wireless Messaging API

• Práticas de programação

Page 4: Programa Expresso de Capacitação Módulo J2ME Aula 7 – MIDP 2.0

Technical Overview

Page 5: Programa Expresso de Capacitação Módulo J2ME Aula 7 – MIDP 2.0

APIs de MIDP 1.0

• Modelo de aplicação:• Javax.microedition.midlet

• Persistência• Javax.microedition.rms

• Rede• Javax.microedition.io.HTTPConnection

• Interface gráfica• Javax.microedition.lcdui

• IO e pacotes util de CLDC• Java.lang• Java.io• Java.util

Page 6: Programa Expresso de Capacitação Módulo J2ME Aula 7 – MIDP 2.0

MIDP 2.0

• Objetivos de MIDP 2.0• Compatibilidade com MIDP 1.0• Foco contínuo em telefones com poucos recursos• Usar informação dos deployments MIDP 1.0 para

criar um modelo mais aprimorado• Foco em aplicações core necessárias a todos os

dispositivos e aplicações

Page 7: Programa Expresso de Capacitação Módulo J2ME Aula 7 – MIDP 2.0

MIDP 2.0 - Novas características

• Novos protocolos de rede• HTTPS, Comm, Datagram, SSL, Socket,

ServerSocket• Nota: Somente HTTP e HTTPS são requeridos pela

especificação

• Funcionalidade Push• Possibilidade de iniciar um MIDlet em resposta a

uma mensagem

• OTA

Page 8: Programa Expresso de Capacitação Módulo J2ME Aula 7 – MIDP 2.0

Requisitos mínimos

• Display:• Tamanho de tela: 96x54• Profundidade de display: 1 bit• Pixel aspect ratio: 1:1

• Input• One or two handed keyboard, touch screen

• Memória:• 256 kb de memória não-volátil• 8 kb para dados persistentes• 128 kb de memória volátil

Page 9: Programa Expresso de Capacitação Módulo J2ME Aula 7 – MIDP 2.0

Requisitos (cont.)

• Rede:• Two-way• Wireless• Possibilidade de intermitência, com uma banda

limitada

• Som• Pode tocar tons, via HW ou SW

Page 10: Programa Expresso de Capacitação Módulo J2ME Aula 7 – MIDP 2.0

Desenvolvimento e Deployment

Page 11: Programa Expresso de Capacitação Módulo J2ME Aula 7 – MIDP 2.0

Verificação de classfiles em CLDC

Page 12: Programa Expresso de Capacitação Módulo J2ME Aula 7 – MIDP 2.0

Passos

1. Escreva sua aplicação

2. Compile-a

3. Use o preverifier

4. Empacote-a1. Assine o JAR (só em MIDP 2.0)

5. Crie o descritor

6. Publique a suite MIDlet

7. Instale via OTA

Page 13: Programa Expresso de Capacitação Módulo J2ME Aula 7 – MIDP 2.0

Prática recomendada: OTA

• MIDP 1.0 deixou não especificado OTA

• MIDP expert group lançou OTA para clarificar detalhes

• Requisito core em MIDP 2.0

Page 14: Programa Expresso de Capacitação Módulo J2ME Aula 7 – MIDP 2.0

OTA

Page 15: Programa Expresso de Capacitação Módulo J2ME Aula 7 – MIDP 2.0

OTA

Page 16: Programa Expresso de Capacitação Módulo J2ME Aula 7 – MIDP 2.0

OTA

Page 17: Programa Expresso de Capacitação Módulo J2ME Aula 7 – MIDP 2.0

OTA

Page 18: Programa Expresso de Capacitação Módulo J2ME Aula 7 – MIDP 2.0

Versões

• Agora que temos MIDP 1.0 e 2.0, é preciso saber a versão que estamos trabalhando• System.getProperty(“MicroEdition-Profile”)

• Por default, o AMS não instalará MIDP 2.0 em aparelhos MIDP 1.0

Page 19: Programa Expresso de Capacitação Módulo J2ME Aula 7 – MIDP 2.0

MIDP 2.0 APIs

Page 20: Programa Expresso de Capacitação Módulo J2ME Aula 7 – MIDP 2.0

MIDP 2.0 APIs

• Segurança e segurança em rede

• Push API

• Media APIs

• APIs de interface gráfica

• Game API

Page 21: Programa Expresso de Capacitação Módulo J2ME Aula 7 – MIDP 2.0

Segurança

Page 22: Programa Expresso de Capacitação Módulo J2ME Aula 7 – MIDP 2.0

Riscos de segurança inclusos

• Aplicações usando o dinheiro do usuário sem permissão• Mensagens SMS podem custar 10 centavas por

mensagem, e com 7 mensagens: 1k de dados

• Informações privadas sendo expostas• Contatos

• DOS potenciais, códigos maliciosos, etc

Page 23: Programa Expresso de Capacitação Módulo J2ME Aula 7 – MIDP 2.0

Modelo de segurança do MIDP 2.0

• MIDlet suites requerem segurança

• Cada MIDlet suite está atrelada a um único domínio de proteção contendo as permissões

• Restrições da API a funções fundamentais

• Extensível a APIs desenvolvidas independentemente (WMA, MMAPI, etc)

Page 24: Programa Expresso de Capacitação Módulo J2ME Aula 7 – MIDP 2.0

Tipos de permissão

• Permissões Allowed• Sem prompt para verificar se é válido

• Permissões de usuário• Garantidas com aprovação do usuário• Usuário escolhe a frequência de prompt:

• Blanket – válido até o usuário configurar o contrário• Session – válido para uma invocação• Oneshot – válido para uma chamada da API

• Um datagrama sendo enviado

Page 25: Programa Expresso de Capacitação Módulo J2ME Aula 7 – MIDP 2.0

Dois tipos de domínio de proteção

• Untrusted domains• Sandbox, como MIDP 1.0• Tipicamente, dispositivo pergunta ao usuário por

acesso

• Trusted domains• Dispositivo tem mecanismo para validar a suite• Pode permitir acesso sem prompt• Geralmente implementado usando criptografia de

chave pública para assinar o JAR

Page 26: Programa Expresso de Capacitação Módulo J2ME Aula 7 – MIDP 2.0

Modelo de segurança

Page 27: Programa Expresso de Capacitação Módulo J2ME Aula 7 – MIDP 2.0

Modelo de segurança – Cont.

Page 28: Programa Expresso de Capacitação Módulo J2ME Aula 7 – MIDP 2.0

Trusted signed applications

• Descritor de aplicação inclui:• Assinatura do JAR• Certificados necessários para verificar assinatura• Permissões requeridas pela aplicação

• Dispositivo autentica assinatura• Usando chave pública raiz do dispositivos• Cercado pelo domínio de proteção

Page 29: Programa Expresso de Capacitação Módulo J2ME Aula 7 – MIDP 2.0

Permissões no WTK

• Atributos

MIDlet-Permissions e

MIDlet-Permissions-opt

do painel

Projetc | Settings

Page 30: Programa Expresso de Capacitação Módulo J2ME Aula 7 – MIDP 2.0

Assinando MIDlets

• Assinar com keytool, JADtool e MEKeytool pode ser complexo

• WTK oferece assinar MIDlets via GUI• Cria um par de chaves e um alias• Crie o certificado• Adicione um certificado de par de chaves ao JAD• Assine o JAR e adicione a assinatura ao JAD

Page 31: Programa Expresso de Capacitação Módulo J2ME Aula 7 – MIDP 2.0

Segurança em rede

• HTTP e HTTPS necessários para MIDP 2.0

• Datagrama – pouco overhead, mas inseguro

• Socket – streams confiáveis

• Socket seguro – stream confiável sobre SSL/TLS

• Conexão a porta serial

• Wireless Messaging – WMAPI

Page 32: Programa Expresso de Capacitação Módulo J2ME Aula 7 – MIDP 2.0

Segurança em MIDP 2.0

• HTTPConnection e HTTPSConnection

• Possibilidade de utilizar sockets puros (SecureConnection)

• MIDP 2.0 define a interface SecurityInfo para informações detalhadas

Page 33: Programa Expresso de Capacitação Módulo J2ME Aula 7 – MIDP 2.0

SecureConnection

• Define uma conexão com sockets seguros

• Uma conexão segura é estabelecida com Connector.open() quando “SSL” é especificado

Na URI, por exemplo:

Connector.open(“ssl://host.com:70”);

• A implementação escolhe entre:• Protocolo TLS versão 1.0• Protocolo SSL versão 3.0

Page 34: Programa Expresso de Capacitação Módulo J2ME Aula 7 – MIDP 2.0

SecurityInfo

• Define os métodos para acessar informação numa conexão segura

• Oferece o certificado, protocolo, versão, suite de cifragem, etc. Uso:SecureConnection sc = (SecureConnection)

Connector.open(“ssl://host.com:70”);

SecurityInfo info = sc.getSecurityInfo();

System.out.print(“Protocol ” + info.getProtocolName);

...

Page 35: Programa Expresso de Capacitação Módulo J2ME Aula 7 – MIDP 2.0

Push (ou AutoLaunch)

Page 36: Programa Expresso de Capacitação Módulo J2ME Aula 7 – MIDP 2.0

Aplicação de rede

• Não é possível criar MIDlets do tipo servidor• Limitações de plataforma:

• Sem multi-threading• Sem processos daemon

• Limitações de recursos computacionais• Segurança

• Solução – conexão offline ao servidor• Confia num proxy para cuidar da primeira

invocação• Conexão inbound

Page 37: Programa Expresso de Capacitação Módulo J2ME Aula 7 – MIDP 2.0

PushRegistry

• MIDP 2.0 define um mecanismo de push• MIDlets podem ser acordados por eventos externos• Push Registry é manuseado pelo AMS• Duas maneiras de se registrar:

• Estática: MIDlet-Push-<n> no JAD• Dinâmica: PushRegistry.registerConnection()

Page 38: Programa Expresso de Capacitação Módulo J2ME Aula 7 – MIDP 2.0

Esquema geral

Page 39: Programa Expresso de Capacitação Módulo J2ME Aula 7 – MIDP 2.0

MMAPI

Page 40: Programa Expresso de Capacitação Módulo J2ME Aula 7 – MIDP 2.0

MMAPI em MIDP 2.0

• MIDP 2.0 Media API é um subconjunto da Mobile Media API (JSR 135)• Somente Sons

• Pacotes:• javax.microedition.media• java.microedition.media.control

Page 41: Programa Expresso de Capacitação Módulo J2ME Aula 7 – MIDP 2.0

Áudio em MIDP 2.0

• Implementações têm que suportar geração de tons e WAV• Tipos adicionais são opcionais

• Para geração de tons:• Manager.playTone();

• Para playback de algum som em formato WAV, crie um objeto Player

• O objeto Player tem os métodos start/stop/pause

Page 42: Programa Expresso de Capacitação Módulo J2ME Aula 7 – MIDP 2.0

Exemplos de código

• Geração de tons:try{

Manager.playTone( ToneControl.C4 , // nota

5000, //ms

100); //volume

} catch(MediaException mee) {}

• Playback com loopingtry{

Player p = Manager.createPlayer(http://myMusicServer/music.wav);

p.setLoopCount(5);

p.start();

} ...

Page 43: Programa Expresso de Capacitação Módulo J2ME Aula 7 – MIDP 2.0

Interface Gráfica

Page 44: Programa Expresso de Capacitação Módulo J2ME Aula 7 – MIDP 2.0

Interface com o usuário• Popup ChoiceGroup

• Alerts podem ter comandos

• Comandos podem ser associados a Item

• Layout para Form e Item

• Custom Itens

Page 45: Programa Expresso de Capacitação Módulo J2ME Aula 7 – MIDP 2.0

Game API

Page 46: Programa Expresso de Capacitação Módulo J2ME Aula 7 – MIDP 2.0

Game API• Conjunto com 5 classes que simplificam o

desenvolvimento de jogos 2D

• Provêem 2 importantes funcionalidades• GameCanvas• Estruturação do jogo em camadas

Page 47: Programa Expresso de Capacitação Módulo J2ME Aula 7 – MIDP 2.0

GameCanvas• Subclasse de Canvas• Fornece offscreen buffer• Armazena o estado de pressionamento das teclas,

podendo serem consultados a qualquer momentoint keyState = getKeyStates();

if ((keyState & LEFT_PRESSED) != 0) { sprite.move(-1, 0); }

Page 48: Programa Expresso de Capacitação Módulo J2ME Aula 7 – MIDP 2.0

Loop de jogo com Canvaspublic class MicroTankCanvas extends Canvas implements Runnable {

public void run() { while (true) {

// Update the game state. repaint();

// Delay one time step. }

}

public void paint(Graphics g) { // Painting code goes here.

}

protected void keyPressed(int keyCode) { // Respond to key presses here.

}}

Page 49: Programa Expresso de Capacitação Módulo J2ME Aula 7 – MIDP 2.0

Loop de jogo com GameCanvaspublic class MicroTankCanvas extends GameCanvas implements Runnable {

public void run() { Graphics g = getGraphics();while (true) {

// Update the game state. int keyState = getKeyStates();// Respond to key presses here.// Painting code goes here. flushGraphics(); // Delay one time step.

}}

}

Page 50: Programa Expresso de Capacitação Módulo J2ME Aula 7 – MIDP 2.0

Layer• Representa um elemento visual do jogo

• Possui posição relativa à tela (x,y) além de dimensões (largura, altura)

• Método paint a ser implementado

• Em um dado momento pode estar visível ou não

Page 51: Programa Expresso de Capacitação Módulo J2ME Aula 7 – MIDP 2.0

Layer - Métodos• int getHeight()

• int getWidth()

• int getX()

• int getY()

• paint(Graphics g)

• setVisible(boolean visible)

Page 52: Programa Expresso de Capacitação Módulo J2ME Aula 7 – MIDP 2.0

TiledLayer

Page 53: Programa Expresso de Capacitação Módulo J2ME Aula 7 – MIDP 2.0

TiledLayer – cont.

Page 54: Programa Expresso de Capacitação Módulo J2ME Aula 7 – MIDP 2.0

TiledLayer - métodos• TiledLayer (int columns, int rows,

Image image, int tileWidth, int tileHeight)

• int getCell (int col, int row)

• paint (Graphics g)

• setCell (int col, int row, int tileIndex)

Page 55: Programa Expresso de Capacitação Módulo J2ME Aula 7 – MIDP 2.0

LayerManager• Gerencia uma série de layers

• Define a ordem na qual os layers são renderizados e em qual região da tela

• Simplifica o processo de renderização

• Define regiões em relação ao eixo-z

Page 56: Programa Expresso de Capacitação Módulo J2ME Aula 7 – MIDP 2.0

LayerManager – cont.

Page 57: Programa Expresso de Capacitação Módulo J2ME Aula 7 – MIDP 2.0

LayerManager - métodos• void append (Layer l)

• Layer getLayerAt (int index)

• void insert (Layer l, int index)

• paint (Graphics g, int x, int y)

• setViewWindow (int x, int y, int width, int height)

Page 58: Programa Expresso de Capacitação Módulo J2ME Aula 7 – MIDP 2.0

Sprite• Elemento visual do jogo que pode ser

renderizado a partir de um ou mais frames

• Possui métodos para rotação, colisão e animação

Page 59: Programa Expresso de Capacitação Módulo J2ME Aula 7 – MIDP 2.0

Wireless Messaging API

Page 60: Programa Expresso de Capacitação Módulo J2ME Aula 7 – MIDP 2.0

Wireless Messaging API – JSR 120

• Acesso padrão a mensages

• WMA foi desenhada para rodar em qualquer configuração

• Endereça as seguintes tecnologias:• Short Message Service – SMS• Cell Broadcast Service – CBS

• Suporta mensagens multimidia, incluindo sons, imagens e texto

Page 61: Programa Expresso de Capacitação Módulo J2ME Aula 7 – MIDP 2.0

Wireless Messaging API – JSR 120

• Baseada no Generic Connection Framework

• Design da funcionalidade é parecida com UDPDatagramConnection

• Já que existem diferenças entre mensagens e datagramas, WMA interfaces definidas em javax.wireless.messaging

• Dois modos de receber mensagens• Usando o metodo receive

• Bloqueia a Thread atual

• Definindo um MessageListener

Page 62: Programa Expresso de Capacitação Módulo J2ME Aula 7 – MIDP 2.0

MessageListener

• Implementa o ouvinte para receber objetos mensagem

• Define um único método notifyIncomingMessage(), que é invocado cada vez que uma mensagem chega

• Para se registrar para mensagens, use o método MessageConnection.setListener()

Page 63: Programa Expresso de Capacitação Módulo J2ME Aula 7 – MIDP 2.0

Boas práticas

Page 64: Programa Expresso de Capacitação Módulo J2ME Aula 7 – MIDP 2.0

Boas práticas

• Cuidado com exceções de segurança

• Design para rede de um modo assíncrono

• Use uma thread para ler

• Use uma thread para escrever

• Registro para autolaunch

Page 65: Programa Expresso de Capacitação Módulo J2ME Aula 7 – MIDP 2.0

Exceções de segurança

• Não use getMessage(),

o usuário não quer ver

isso

• Ofereça uma sugestão

• Use imagens

• Espere pela confirmação

do usuário

Page 66: Programa Expresso de Capacitação Módulo J2ME Aula 7 – MIDP 2.0

Desenhe para threads

• I/O blocks numa thread

Separada

• Exceções de I/O

• Feche as conexões

Page 67: Programa Expresso de Capacitação Módulo J2ME Aula 7 – MIDP 2.0

Usando uma thread para ler

• Mantenha thread ativa

• Até ser mandado um

stop

• Ou ocorrer uma

exceção

Page 68: Programa Expresso de Capacitação Módulo J2ME Aula 7 – MIDP 2.0

Use threads para enfileirar escritas

• Use o open connection

• Enfileire os dados a serem

escritos

• Use uma thread separada

para escrever

Page 69: Programa Expresso de Capacitação Módulo J2ME Aula 7 – MIDP 2.0

Usando uma thread para escrita

• No método run, enfileire

as chamadas

• Desenfileire os dados

a serem escritos

• Crie um datagrama para

e mande-o

Page 70: Programa Expresso de Capacitação Módulo J2ME Aula 7 – MIDP 2.0

Checando autolaunch

• Pegue uma lista das

conexões ativas

• Abra as conexões ativas

• Manuseie I/O normalmente

Page 71: Programa Expresso de Capacitação Módulo J2ME Aula 7 – MIDP 2.0

Referências

• Core J2ME

• Site da Sun

• Wireless Programming with J2ME: Cracking the code, ISBN: 0-7645-4885-9

Page 72: Programa Expresso de Capacitação Módulo J2ME Aula 7 – MIDP 2.0

Agora que acabou

"Sem esforço não há progresso, mas com esforço também não há progresso”

Ryotan Tokuda, Mestre Zen

Alguém finalmente entendeu o que danado é isso????

Page 73: Programa Expresso de Capacitação Módulo J2ME Aula 7 – MIDP 2.0