Post on 28-Nov-2014
description
Computação Móvel
Veio para resolver um grande problema desta “Era da Informação”
(ou excesso de Informação, segundo alguns)Necessidade de acesso à informação (qualquer lugar e a qualquer momento) –Aumentar a eficiência do trabalho–Facilidade no transporte de dispositivos–Cada vez mais dispositivos–Cada vez mais recursos–Custos caindo...
Computação Móvel
ServiçosTelefoniaCelular
Redes:Wi Fi
Wi MaxBluetooth
Internet
OperadorasDispositivos Portáteis ouEmbarcados
Computação Móvel
Principais problemasConectividade–Perda de conexão–Qualidade variável do enlace – sem QoS–Regiões sem Cobertura–Largura de Banda estreitaDispositivos–Possuem poucos recursos–Energia limitada–Interface pobre–Grandes diferenças entre eles
Por que Java?
●O JavaME (MicroEdition) é um retorno do Java as origens, comunicação de pequenos dispositivos heterogêneos. ●Foi criada pois o Java cresceu muito●Diferentes Dispositivos:–Multiplataforma => Máquina Virtual●Quantidade de desenvolvedores●Suporte dos maiores fabricantes: –Nokia, Siemens, Motorola, Sony/Ericson, LG...
JavaME – as 2 Divisões
Hardware
Máquina Virtual
Configuração
Perfil
Programa JavaME
Bons Recursos
JVM-CDC
CDC
FP / PBP / PP
Programa JavaME
Muito Simples
KVM
CLDC
MIDP
Programa JavaME
Padrão de arquitetura Arquitetura CDC Arquitetura CLDC
Celulares, PalmPalm, Embarcados, SetupBox
JavaME - siglasConfigurações
●CLDC: Conected Limited Device Configuration–Poucos recursos e conexão fraca -> Celulares●CDC: Conected Device Configuration–Bons recursos computacionais e de conexãoPerfis
●MIDP: Mobile Information Device Profile–Perfil usado para desenvolvimento para celulares●FP: Foundation Profile – sem GUI●PBP: Personal Basis Profile – gráficos limitados●PP: Personal Profile – quase Java padrão–Este 3 perfis são utilizados com o CDC
JavaME – API´s MIDP
CLDCjava.langjava.iojava.utiljava.microedition.io
MIDPjava.microedition.lcduijava.microedition.lcdui.gamejava.microedition.midletjava.microedition.rmsjava.microedition.pkijava.microedition.mediajava.microedition.media.control
MIDlet Suite
●Pacote que segue os padrões de MIDP●“.jar” da aplicação para celular, inclui:–Inclui o arquivo “MANIFEST.MF” –Inclui recursos (imagens, sons) –Inclui uma ou mais MIDlets (aplicações MIDP)●Acompanha arquivo “.jad“ (java descriptor), normalmente usado para baixar, instalar e configurar o .jar.
Ex: Jogo.jar – aplicativo - 45kbJogo.jad – descritor - 150bytes
MIDP – arquivo MANIFEST.MF
●Arquivo de propriedades, incluído no “.jar”●Descreve o conteúdo e configura a Suite●Campos obrigatórios:–MIDlet-<n>:info MIDlet n - Nome,Icone,Classe –MIDlet-Vendor: autor–MIDlet-Name: nome da Suite MIDlet–MIDlet-Version: versão do aplicativo–MicroEdition-Configuration: versão do CLDC–MicroEdition-Profile: versão do MIDP●A linha MIDlet-<n> se repete para cada MIDlet dentro da suite.
MIDP – exemplo MANIFEST.MF
Manifest-Version: 1.0MIDlet-1: Xadrez, torre.png , demo.XadrezMIDlet-2: Dama, disco.png , demo.DamaMIDlet-3: Gamão, gamao.png, demo.GamaoMIDlet-Vendor: Chicao SA.MIDlet-Name: Jogos DemoMIDlet-Description: Exemplo de Jogos JavaMEMIDlet-Version: 1.0.0MicroEdition-Configuration: CLDC-1.1MicroEdition-Profile: MIDP-2.1
MIDP – Descritor “.jad”
●Arquivo externo ao “.jar”, usado na instalação●Semelhante ao MANIFEST.MF e com precedência sobre ele●Tem o mesmo nome do pacote “.jar”●Outros campos utilizados:–MIDlet-Jar-Size: tamanho em bytes do “.jar”–MIDlet-Jar-URL: localização do “.jar”
MIDP – exemplo JogosDemo.jad
MIDlet-Jar-Size: 15516MIDlet-Jar-URL: JogosDemo.jarMIDlet-Name: Jogos DemoMIDlet-Vendor: Chicao SA.MIDlet-Version: 1.0MicroEdition-Configuration: CLDC-1.1MicroEdition-Profile: MIDP-2.1
MIDlet – Ciclo de Vida
Pausado
Rodando Destruido
startApppauseApp destroyApp
destroyApp
Construtor
Criando um MIDlet
●Basta criar uma classe que estenda MIDlet–javax.microedition.midlet.MIDlet
●
●Implementar os métodos:–Construtor()–public void startApp()–public void pauseApp()–public void destroyApp(boolean b)
Para executar ou instalar, deve estar empacotada como MIDlet Suite, com o MANIFEST.MF
Interface Gráfica
Características:Tela pequena – pouca resolução e coresInterface pobre – sem apontador
Por isso não possui alguns objetos gráficos comuns, como botões, e deve haver uma grande preocupação com a navegação e troca de telas no projeto.
A API javax.microedition.lcdui é a responsável pelos recursos gráficos do MIDP
API javax.microedition.lcdui
Object
Display Displayable Command Item Graphics
Font
Image
Ticker
AlertType
Canvas Screen
AlertForm
TextBox
List
DateField
TextField
Gauge
Spacer
ChoiceGroup
CustomItem
ImageItem
StringItem
Classes para Exibição de Telas
DisplayRepresenta a tela do dispositivoExiste apenas uma para todo o MIDletObtida por: tela = Display.getDisplay(this)
“tela” é um Display e “this” é um MIDlet
DisplayableSão as telas configuradasSão alternadas no Display atraves de:
tela.setCurrent(menu)“tela” é um Display e “menu” é um Displayable
Classes “Displayable”
Canvas - classe para telas de baixo nível, desenhos e eventos
Screen - classe para telas de alto nível, específicas, dos tipos:Alert: mensagens de avisoTextBox: apenas textosList: lista de opções, menusForm: permite agrupar itens,
campos de entrada, seletores, medidores, imagens e textos
Displayable
Canvas Screen
AlertForm
TextBox
List
Classes “Item”
Componentes gráficos usados em Displayable Form
TextField – entrada textoDateField – entrada dataStringItem – etiqueta “label”ChoiceGroup – seleçãoImageItem – imagem Gauge – medidor Spacer – espaçador CustomItem – crie o seu...
Item
DateField
TextField
Gauge
Spacer
ChoiceGroup
CustomItem
ImageItem
StringItem
Comandos – Classe CommandProblema: “Não há padronização de botões em celulares!”Solução:São atribuídos a tipos: OK, CANCEL, SCREEN, STOP,
BACK, EXIT, HELP e ITEM O Celular se encarrega de colocar o
comando na posição “padrão do aparelho” pelo tipo.
Caso haja vários comandos na mesma posição, mostra um menu com as várias opções.
CommandListener
Interface para tratamento dos eventos de Command.
Deve ser implementado pela classe que vai tratar os comandos
Método a ser implementado: public void commandAction(Command c, Displayable d) onde: “c” recebe o objeto que gerou o comando “d” recebe a tela onde foi dado o comandoEste método pode ser o mesmo para tratar
diversos comandos, por isso é hábito testá-los
Por enquanto é só!