Buscar

Desenvolvimento de Aplicativos Móveis com JavaME e Bluetooth®

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 15 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 15 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 15 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Desenvolvimento de Aplicativos Móveis com Bluetooth® 
Utilizando a Plataforma Java Micro Edition
Índice
1. Introdução
1.1. Desafios no Desenvolvimento de Aplicativos para Celular
1.2. O que é Java Micro Edition
2. Programando em JavaME
2.1. Fluxo de Telas
2.1.1.MIDlet Visual
2.1.2.Formulário
2.1.3.Lista
2.1.4.Canvas
2.2. Comandos
2.2.1. Adicionando Comandos
2.2.2. Personalizando o Comportamento de um Comando
3. Aplicações com Bluetooth®
3.1. Estabelecendo uma Conexão
3.1.1. Procurando por Dispositivos
3.1.2. Procurando por Serviços
3.1.3. Instanciando a Conexão
3.1.4. Envio e Recebimento de Dados
4. Instalando o Aplicativo.
1. Introdução
Nos dias de hoje, a demanda por inovações na área de aplicações para dispositivos móveis vem 
crescendo a cada dia, e isso se deve à grande quantidade de novidades que vêm sendo apresentadas aos 
consumidores nas lojas de artigos eletrônicos. Os celulares e smartphones fabricados na atualidade são 
caracterizados pela grande variedade de recursos de hardware que possuem, e isso aumenta as 
possibilidades de desenvolvimento de aplicativos para os mesmos.
Tendo como objetivo níveis ótimos de aproveitamento de tais funcionalidades encontradas nos 
gadgets eletrônicos do mundo moderno, diversas ferramentas têm sido criadas para que desenvolvedores 
interessados em inovar possam criar novas soluções em software para dispositivos móveis de maneira 
descomplicada.
Esta apostila terá como foco apresentar duas ferramentas recentes que têm sido muito úteis na 
modelagem de aplicativos móveis: a plataforma de desenvolvimento Java Micro Edition, e a tecnologia 
Bluetooth®.
1.1. Desafios no Desenvolvimento de Aplicativos para Celular
Um dispositivo móvel, como um celular ou smartphone, não possui as mesmas características de 
um computador convencional, necessitando assim um tipo de estrutura especial para seus aplicativos.
No projeto de um sistema embarcado, devem-se levar em consideração as particularidades na 
estrutura física do aparelho no qual ele será instalado. A arquitetura de um celular comum objetiva a 
portabilidade física do mesmo, o que impede que o mesmo se beneficie de recursos como:
- Cursor movido por periférico de rastreamento vetorial.
- Múltiplos processadores de alto desempenho
- Alta disponibilidade de memória volátil.
- Alta capacidade de armazenamento secundário de dados.
- Tela de exibição grande e de alta qualidade.
Tendo em vista tais privações de hardware, algumas soluções devem ser desenvolvidas pelo 
programador para que a execução do aplicativo seja eficiente, ágil e intuitiva para o usuário.
Ao invés de dirigir um cursor às opções da janela de exibição atual do programa, o usuário deve ser 
capaz de navegar entre as opções utilizando as setas, ou no caso dos smartphones, acessar as opções 
através de botões que respondam ao toque na tela.
Devido ao pequeno espaço de exibição fornecido pela tela dos celulares de tamanho convencional 
(entre 2.5 e 3 polegadas), a interface de exibição do software não consegue comportar muitos recursos 
visuais simultaneamente de maneira eficiente. Isso requer que o desenvolvedor seja minimalista na hora de 
criar sua interface, de modo que saiba associar elegância e funcionalidade sem que a tela de exibição do 
aplicativo seja poluída com informações, botões ou objetos visuais em excesso.
Finalmente, além das dificuldades no desenvolvimento da interface e controle de execução para 
seus sistemas, os dispositivos móveis, em geral, têm disponibilidade limitada de processamento e também 
de armazenamento, tanto primário quanto secundário. Isso gera mais uma barreira a ser transposta nos 
casos onde o aplicativo possui funcionalidades muito complexas ou de alto custo computacional, obrigando 
o programador a ser cauteloso quanto ao uso de estruturas de dados muito custosas ou algoritmos com alto 
custo de processamento (algoritmos de busca com possibilidade de explosão combinacional, procedimentos 
recursivos, etc).
1.2. O que é Java Micro Edition
O JavaME (Java Micro Edition) é um ambiente de programação para desenvolvimento de aplicativos 
móveis desenvolvido pela Oracle, e contém ferramentas simples e eficientes para a criação de soluções 
para celulares e outros dispositivos móveis. Ferramentas robustas, bibliotecas completas contendo métodos 
e classes para todos os fins, e a agregação de novos plug-ins e bibliotecas, são algumas razões pelas quais 
o ambiente têm se tornado bastante popular na área de desenvolvimento de sistemas embarcados.
A plataforma Netbeans comporta com eficiência o JavaME, e servirá como referência para as 
demonstrações contidas nesta apostila.
Os links para download gratuito das ferramentas mencionadas nessa seção podem ser encontradas 
nos links abaixo:
Netbeans IDE 7.0:
http://netbeans.org
Java Micro Edition SDK 3.0:
http://www.oracle.com/technetwork/java/javame/index.html
2. Programando em JavaME
Como visto anteriormente, programar em Java para dispositivos móveis se torna uma tarefa fácil 
quando se tem as ferramentas certas para alcançar os objetivos em um projeto. Um aplicativo para celular 
possui três elementos chave a serem avaliados na hora de ser projetado:
- Qual a sequência das telas a serem exibidas.
- Qual a forma das telas do aplicativo.
- De que maneira o usuário será capaz de navegar pelas funções do aplicativo.
As próximas duas subseções têm como objetivo apresentar como as duas entidades mais 
importantes na criação de um aplicativo são representadas no JavaME: a tela, responsável por apresentar 
todas as informações ao usuário, e o comando, encarregado de permitir ou não, que o usuário tome alguma 
atitude enquanto usa o aplicativo.
2.1. Fluxo de Telas
Para que as funcionalidades sejam apresentadas ao usuário, o JavaME traz consigo uma série de 
classes pré-modeladas primitivas, cada uma com sua finalidade e também suas limitações.
Com um pouco de criatividade é possível associar tais classes de modo a transpor tais limitações, 
permitindo que o aplicativo se torne elegante e funcional, sem que o desenvolvedor precise elaborar novas 
classes e métodos de exibição de tela complexos.
As classes aqui apresentadas são derivadas da classe Displayable, ou seja, toda instância das 
classes apresentadas nas próximas subseções pode ser exibida na tela através do método 
switchDisplayable, que é gerado automaticamente quando criado um novo MIDlet Visual.
2.1.1. MIDlet Visual
Como em todo sistema, os aplicativos embarcados também necessitam de uma classe principal, 
que determina quais e de que forma os procedimentos serão executados.
A classe Visual MIDlet faz a função de “painel de edição” em um aplicativo feito no ambiente 
JavaME, e é nela em que serão adicionados, sincronizados e editadas as telas, funções e comandos do 
aplicativo.
Como ilustrado na figura 1, o ambiente Netbeans possui quatro abas de edição para um Visual 
MIDlet:
1) Código-Fonte: Edição do aplicativo em nível de código.
2) Tela: Manipulação visual de alguma tela presente no aplicativo. Mostra uma prévia do resultado 
final da tela sendo editada.
3) Fluxo: Organização da forma em que serão exibidas as diferentes telas do aplicativo.
4) Analisador: Reporta inconsistências e avalia a funcionalidade da tela em edição.
Figura 1 – Abas de edição para Visual MIDlet no Netbeans.
A criação e edição de um aplicativo se torna muito simples dessa forma, pois a interface de edição é 
descomplicada e permite que o desenvolvedor organize sua aplicação de maneira personalizada.
2.1.2. Formulário
O formulário de texto, contido no pacote javax.microedition.lcdui e identificada como Form, 
é a classe de tela mais simples que pode ser encontrada no ambiente Java Micro Edition. Como a maioria 
das classes de exibição básicasdo mesmo pacote, não é possível arrastar botões, caixas de seleção, listas 
de opção e etc. em sua estrutura, isso só é possível de ser feito com o uso de outras ferramentas mais 
complexas que não entram no escopo desta apostila.
O método append da classe Form permite que tanto texto quanto imagens sejam adicionadas a um 
formulário. A figura 2 ilustra como ambos podem ser feitos.
Figura 2 – Exemplo do uso do método append da classe Form.
Para fins de navegação em tela, o método append também adiciona objetos da classe Item no 
formulário. Em um formulário, o item tem a função de indexar um elemento e assim endereçá-lo quando 
necessário (muito útil na criação de menus).
2.1.3. Lista
A classe List é uma solução excelente quando o programador deseja criar uma lista linear de itens 
selecionáveis na tela. É possível a edição da fonte de exibição, e também a adição de um ícone na lateral 
esquerda de cada item da lista, tudo à escolha do desenvolvedor.
O exemplo da figura 3 mostra como é simples personalizar uma lista de dois itens, de modo que 
cada um tenha seu próprio design.
Figura 3 – Exemplo de lista personalizada criada a partir da classe List.
O método append anexa um novo item com ícone à lista, enquanto setFont determina qual será a 
formatação do texto de exibição do item. É possível também alterar o aspecto de um item durante a 
execução, com a função set, que usa como parâmetro o índice do item a ser modificado, e os novos nome 
e imagem do item.
Durante a execução do aplicativo, o usuário será capaz de navegar pelos itens, e o item 
selecionado pode ser endereçado através do método getSelectedIndex da classe List.
2.1.4. Canvas
Suponha que o desenvolvedor do aplicativo deseje criar uma tela onde cada tecla pressionada pelo 
usuário tenha um efeito diferente no contexto da aplicação, como isso pode ser feito? Através da classe 
Canvas, destinada à modelagem de jogos no JavaME.
A classe Canvas tem uma função que classes básicas como Form e List não suportam, que é o 
suporte à detecção de eventos do teclado.
Para o aproveitamento integral das funcionalidades da classe, o desenvolvedor deverá criar sua 
própria classe e usar a herança, permitindo que os métodos do Canvas sejam sobrescritos. Feita a 
herança, o desenvolvedor terá controle das ações que o usuário tomar enquanto o Canvas estiver sendo 
exibido (pressionar botão, segurar botão, soltar botão, apertar repetidamente alguma tecla, etc).
A exibição em tela desta classe se dá de uma maneira diferenciada. Tanto no formulário quanto na 
lista, a adição de itens na tela era feita através do método append, já no Canvas, todos os elementos a 
serem exibidos deverão ser desenhados em tela através do método paint. Isto requer certa habilidade do 
desenvolvedor na hora de organizar e representar os objetos em tela, porém dá maior liberdade de criação, 
pois quase qualquer forma pode ser desenhada com o uso dos métodos básicos de desenho da classe 
Graphics. A figura 4 mostra um exemplo do que pode ser desenhado em um Canvas com poucas linhas 
de código.
Figura 4 – Exemplo de desenho simples exibido em um Canvas.
Para ter controle sobre os eventos de tecla, basta sobrescrever os métodos de detecção e 
tratamento de eventos abstratos contidos no Canvas. Dois dos principais métodos e suas respectivas 
finalidades são ilustrados na figura 5.
Figura 5 – Exemplos de uso das principais funções da classe Canvas.
O parâmetro de valor inteiro keyCode presente nos métodos keyPressed e keyReleased é 
referente a qual tecla foi acionada pelo usuário, e o Canvas possui endereçamento de todas as teclas 
presentes em teclados comuns de celular.
Outros eventos mais específicos também são identificados pela interface, e possuem os mesmos 
parâmetros de keyPressed e keyReleased.
2.2. Comandos
Comandos são aqueles que determinam quais ações estão disponíveis ao usuário em cada tela 
existente no aplicativo. São representados pela classe Command no JavaME, e suas instâncias são 
“encaixadas” na presente tela, dando uma nova funcionalidade à mesma (formulário, lista, canvas ou 
qualquer outra presente nas bibliotecas da plataforma).
2.2.1. Adicionando Comandos
Quando se programa utilizando o ambiente Netbeans, a aba “fluxo” aparece na tela de edição do 
seu MIDlet, e é nela que será feito todo o gerenciamento de sequência de exibição de telas do aplicativo.
Para adicionar uma tela basta arrastá-la da lista de objetos suportados pela plataforma, e então 
assimilar algum comando de outra tela à sua exibição, de modo que, quando tal comando for acionado, a 
tela atual do aplicativo será atualizada para o objeto de tela recém-criado. O aplicativo ilustrado na figura 6 
tem duas telas: um formulário, que aparece logo quando o aplicativo é iniciado, e uma lista, que é mostrada 
em tela quando o comando “Sair” do formulário for acionado.
Figura 6 – Exemplo de fluxo de telas em um aplicativo.
Da mesma forma que uma tela pode ser colocada no plano de fluxo, um comando pode ser 
colocado em uma tela. Basta usar o mesmo método de “arraste” do tipo de comando escolhido para a tela 
desejada.
Quando adicionado a uma tela, o comando será listado na parte inferior da interface, e então pode 
ser acessado pelo usuário através das teclas padrão do teclado de seu dispositivo móvel. A figura 7 mostra 
qual o aspecto resultante da adição de dois comandos em um formulário.
Figura 7 – Aspecto resultante de um formulário com dois comandos.
2.2.2. Personalizando o Comportamento de um Comando
Uma vez adicionados, os comandos podem ser editados para que realizem algum procedimento 
quando acionados pelo usuário. Para editar o comportamento de um comando, basta ir à parte de código do 
MIDlet que detecta o acionamento do comando, e adicionar as linhas de códigos necessárias.
Os MIDlets, por padrão, têm adicionados a sua estrutura a interface CommandListener, que tem 
por função principal adicionar o método commandAction para a classe. A função commandAction recebe 
por parâmetro uma tela e um comando, e cria assim uma cadeia do tipo “ if-else” onde podem ser escritas as 
funções de cada comando contido em cada tela da aplicação.
Para trocar a tela atual, a classe MIDlet possui o método switchDisplayable. Como exemplo 
da associação da cadeia “if-else” com o método switchDisplayable, podemos usar o caso de exibição 
em tela do Canvas, que deve ser feita manualmente.
Para exibir um Canvas, os seguintes passos devem ser seguidos:
1) Instanciar o Canvas dentro do MIDlet, adicionando todos os comandos do mesmo através do 
método addCommand.
2) Definir qual tela, e qual comando da mesma exibirá o Canvas.
3) Adicionar a função switchDisplayable no final da função que exibirá o Canvas, dentro da 
cadeia “if-else” da função commandAction do MIDlet principal.
4) Extender a classe Canvas para a interface CommandListener no cabeçalho.
5) Associar o Canvas como sendo o próprio CommandListener no construtor através da função 
setCommandListener da própria classe Canvas (exemplo: 
“this.setCommandListener(this);”).
6) Adicionar na cadeia “if-else” os casos de uso dos comandos do Canvas. 
A figura 8 ilustra o resultado em código de um caso onde, o comando “Trocar” do formulário de 
nome “MeuFormulario” exibe o Canvas na tela.
Figura 8 – Exemplo de edição de comandos em nível de código.
Da mesma forma que a troca de telas é feita, qualquer outra função pode ser associada a um 
comando, basta editar seu comportamento na cadeia “if-else” em CommandAction da maneira desejada.
3. Aplicações com Bluetooth®
O protocolo Bluetooth® de comunicação tem se popularizado bastante devido à sua grande 
aplicação na conexão sem fio entre dispositivos, e é bastante utilizado hoje em dia principalmentena 
transferência de pequenas quantidades de dados entre celulares, smartphones e computadores.
Sua estrutura de conexão é simples, e por causa disso se torna uma ferramenta muito útil no 
desenvolvimento de aplicações que demandem a troca de dados, porém nem sempre têm acesso à internet 
para fazê-lo.
O JavaME possui bibliotecas que simplificam a criação dos processos de busca, conexão e 
transferência de dados, porém o emulador da plataforma não permite que a conexão seja efetivamente 
testada no computador, necessitando assim que o aplicativo seja instalado, após a compilação, em algum 
dispositivo com suporte à conexão Bluetooth® para que seja devidamente testado.
3.1. Estabelecendo uma Conexão
Uma conexão via protocolo Bluetooth® entre dois dispositivos deve ser feita por etapas, e requer 
que saibam algumas informações sobre os dispositivos a serem conectados. Primeiramente há de se obter 
as seguintes informações sobre os dispositivos que serão conectados:
1) Quais as especificações de segurança de conexão requeridas (se necessita ou não de 
criptografia ou autenticação).
2) Quais os serviços de conexão fornecidos.
A conexão via Bluetooth® pode ser estabelecida via diferentes protocolos, cada um tendo uma 
função específica. Alguns dos principais protocolos de comunicação possíveis são:
• RFCOMM
• OBEX
• FTP
• HTTP
• L2CAP
As propriedades de cada protocolo não serão discutidas nesta apostila, porém as especificações de 
cada um podem ser encontradas em livros e também na internet.
Existem várias funções que podem ser executadas via Bluetooth®, porém cada dispositivo tem sua 
lista específica de serviços disponíveis. Alguns exemplos de serviços são:
• Conexão via Porta Serial
• Conexão do tipo Dial-Up
• Transferência de Objeto via OPP (Object Push Profile)
• Transferência de Arquivo via FTP (File Transfer Profile)
• Serviço de Fax
• Interpretação de Faixas de Áudio via A2DP (Advanced Audio Distribution Profile)
• Impressão de Arquivos via BPP (Basic Printing Profile)
Os serviços suportados pelo dispositivo são determinados pela arquitetura de hardware e pelo 
sistema operacional usado, o que dificulta bastante a adição de um serviço ao mesmo.O pacote Bluecove 
também se limita a apenas alguns serviços oferecidos pelo protocolo Bluetooth, sendo eles:
• SDAP
• RFCOMM
• L2CAP
• OBEX
As classes e métodos utilizados nos exemplos são do pacote Bluecove, que pode ser baixado 
gratuitamente em http://bluecove.org e deve ser adicionado às bibliotecas do projeto em 
desenvolvimento.
Nos próximos capítulos serão descritos todos os passos necessários para se estabelecer uma 
conexão básica via Bluetooth® usando o Bluecove no JavaME. Para isso também é necessário que se 
saiba quais os padrões de números assimilados da tecnologia Bluetooth®, e os mesmos podem ser 
encontrados em http://www.Bluetooth.org. 
3.1.1. Procurando por Dispositivos
 
Escolher um dispositivo para se conectar é a primeira etapa para a criação do link Bluetooth®. A 
maneira mais simples de fazê-lo é criando uma lista de dispositivos ao alcance, permitindo assim que o 
usuário do aplicativo escolha com qual deseja se conectar.
É possível fazer a busca de dispositivos utilizando apenas quatro classes da biblioteca Bluecove:
• LocalDevice: Representa o dispositivo móvel que hospeda o aplicativo. Guarda todas as 
informações referentes ao dispositivo local.
• RemoteDevice: Representa um dispositivo móvel remoto. Guarda todas as informações de 
identificação do dispositivo externo.
• DiscoveryAgent: Agente de busca. Possui todos os métodos necessários para que o 
procedimento de busca possa ser realizado.
• DiscoveryListener: Auxilia no processo de armazenamento dos dispositivos encontrados. É 
uma interface Java que deve ter seus métodos sobrescritos.
A figura 9 mostra como a chamada do procedimento de busca pode ser feita.
Figura 9 – Procedimento de busca de dispositivos.
O agente da classe DiscoveryAgent pode, através dos métodos startInquiry e 
cancelInquiry, controlar o procedimento de busca de dispositivos.
Quando iniciada a busca, o objeto da classe DiscoveryListener é o responsável por fazer o 
armazenamento dos dispositivos encontrados. Quando encontrado um dispositivo com Bluetooth® ligado ao 
alcance, o método deviceDiscovered é acionado, que por sua vez deve ser capaz de armazenar em 
uma lista as informações do RemoteDevice que foi reconhecido. Um exemplo de implementação da classe 
auxiliar é ilustrado na figura 10.
Figura 10 – Exemplo de implementação da classe DiscoveryListener.
Uma vez terminada a busca, a lista de dispositivos encontrados já pode ser acessada para que a 
listagem em tela dos mesmos possa ser feita.
3.1.2. Procurando por Serviços
Antes da conexão ser criada, há de se saber que tipo de serviço será requisitado do dispositivo 
escolhido. Como visto anteriormente, existe uma grande variedade de serviços suportados pela tecnologia 
Bluetooth®, porém cada dispositivo diferente dá suporte a apenas uma porção específica destes serviços.
Cada serviço é identificado por um UUID (Universally Unique Identifier), um valor fixado pelos 
padrões da tecnologia Bluetooth® que pode ser encontrado em http://www.Bluetooth.org. A busca por 
serviços tem como função detectar quais serviços são suportados pelo dispositivo alvo, e então fornecer 
uma URL de conexão para cada serviço disponível.
Assim como a busca por dispositivos, a busca por serviços é muito simples de ser feita. Na figura 11 
pode ser observado que, a única diferença significativa entre a busca de dispositivos e serviços é o método 
chamado pelo agente da classe DiscoveryAgent.
Figura 11 – Exemplo de busca por serviços.
3.1.3. Instanciando a Conexão
Uma vez conhecidos os serviços disponibilizados pelo dispositivo escolhido, já é possível a criação 
da conexão. Para cada serviço encontrado disponível no RemoteDevice de destino existe uma URL de 
conexão, e basta instanciar um objeto do tipo Connection para que a conexão seja feita e a troca de 
dados possa ser iniciada.
A instanciação de uma conexão pode ser feita poucas linhas através do método open da classe 
Connector, como no exemplo da figura 12.
Figura 12 – Exemplo de instanciação de conexão Bluetooth®.
3.1.4. Envio e Recebimento de Dados
Instanciada a conexão, já se pode ter acesso aos objetos para troca de dados. Toda conexão tem 
dois objetos para esta tarefa: a InputStream, para recebimento de dados enviados pelo dispositivo alvo, e 
a OutputStream, destinada ao envio de dados ao dispositivo alvo.
As chamadas “Streams” podem enviar e receber dados em vários formatos de maneira 
sincronizada ou não. Se a troca de informações for feita de maneira assíncrona entre os dispositivos, a 
organização e interpretação dos dados se torna um obstáculo, que há de ser transposto pela modelagem de 
um sistema mais robusto para controle de fluxo de dados.
Ambas as instâncias de InputStream e OutputStream podem ser acessadas pela instância de 
Connection, através dos métodos getInputStream e getOutputStream, respectivamente.
4. Instalando o Aplicativo
Depois de concluído o projeto do aplicativo, basta instalá-lo nos aplicativos de destino. Para isso, 
basta compilar o projeto, e utilizar os arquivos .jar e .jad gerados pela compilação (localizados na pasta 
“dist” do projeto Netbeans) para realizar a instalação do aplicativo em celulares, smartphones e outros.
O dispositivo deve ter suporte à plataforma Java para rodar normalmente, e a interface gráfica 
resultante pode variar de formato entre dispositivos móveis devido tanto ao sistema operacional instalado, 
quanto à disposição do teclado do mesmo.

Outros materiais