conexão bluetooth android

Download Conexão Bluetooth Android

Post on 18-Jul-2015

2.466 views

Category:

Documents

3 download

Embed Size (px)

DESCRIPTION

comunicação android

TRANSCRIPT

Conexo Bluetooth Android Parte 01: Estrutura InicialOl! Esta a primeira parte de um artigo sobre como desenvolver uma conexo entre um computador utilizando Java e um dispositivo Android. Java? Sim, Java. Eu no posso negar que gosto e admiro algumas caractersticas da linguagem e sua estruturao.

ApresentaoEste artigo no vai explicar o que uma conexo Bluetooth ou quais as camadas de rede ela utiliza. Basicamente, vamos ver como podemos criar um servidor Bluetooth em qualquer mquina que possua instalado uma JRE e possivelmente algumas bibliotecas externas, como a BlueZ no Ubuntu. Aps, ser apresentado como criar um pequeno aplicativo que conecte neste servidor no Android. Tambm informo que alguns dados esto em ingls, principalmente porque meu Sistema Operacional foi instalado nesta linguagem e que meu Sistema Operacional o Ubuntu 11.04 Natty Narwhal. Estou utilizando o Eclipse Indigo para desenvolvimento e a verso do Java a 1.6.0_26.

IntroduoO presente documento resultado da pesquisa de como criar um Apresentador de Slides para Android que utilize uma conexo Bluetooth com uma mquina local, fruto da disciplina de Programao para Dispositivos Mveis do primeiro semestre do ano atual. O Java no possui uma biblioteca nativa para conexo Bluetooth, somente uma especificao, possivelmente para manter a portabilidade. Portabilidade define as caractersticas que uma linguagem de programao possui semelhantes entre vrias arquiteturas de computador, como o tamanho de memria para alocar determinado tipo de dado. Ora, se o Java sempre utiliza a mesma mquina virtual para ser executado, porque ele considerado uma linguagem portvel?

Bibliotecas NecessriasAlm de um bom ambiente de desenvolvimento, vamos precisar de algumas bibliotecas adicionais ao Java para criar uma conexo Bluetooth na mquina local. Obviamente, voc tambm ir precisar de um trasmissor Bluetooth devidamente instalado. Vamos utilizar a biblioteca Bluecove para criar um servio de conexo Bluetooth. Tambm vamos utilizar para desenvolvimento o ambiente Eclipse, mas tambm ser possvel a utilizao de outras interfaces, como Netbeans. Simplesmente devemos efetuar o download de dois arquivo JAR que possuem a biblioteca Bluecove. Quando este artigo foi desenvolvido, a verso atual era a 2.1.0 e pode ser adquirida acessando a pgina oficial do Bluecove no SourceForge. Voc vai precisar dos arquivos, o bluecove-2.1.0.jar e bluecove-gpl-2.1.0.jar.

1

Particularmente, acho interessante que coloque estes arquivos num diretrio especial, dentro de seu home. Eu vou armazen-los dentro do diretrio ~/Apps/jars.

Novo ProjetoVamos criar um novo projeto Java no Eclipse com o nome BluetoothServer. Acesse as propriedades do projeto atravs do menu File - Properties, entre no menu Java Build Path. Acesse a aba Libraries e adicione os arquivos JAR do Bluecove acessando a opo Add External JAR, conforme o exemplo abaixo.

Propriedades do Projeto com Bluecove Agora vamos criar uma pequena classe de exemplo que ir trabalhar como um servidor Bluetooth e que poder receber uma conexo de qualquer outro dispositivo.

Estrutura InicialVamos adicionar uma nova classe chamada Server com um nome de pacote qualquer. Neste caso, o pacote utilizado ser o endereo oficial do autor. Aps, vamos tornar a classe executvel implementando a interface Runnable. O mtodo run receber a lgica de abertura de conexo. Tambm vamos adicionar um mtodo principal main para abertura do servio. Teremos a seguinte estrutura de classe.package br.nom.camargo.wanderson.bluetooth.server; /** * Servidor Bluetooth * @author Wanderson Henrique Camargo Rosa */ public class Server implements Runnable { /** * Fluxo de Execuo Principal */ public void run() { // Servio de Conexo Bluetooth } /** * Execuo Principal do Aplicativo * @param args Argumentos de Execuo */

2

public static void main(String args[]) { Server server = new Server(); server.run(); } }

Com esta estrutura inicial, vamos criar um servidor capaz de receber uma conexo Bluetooth atravs de qualquer outro dispositivo. O servidor ser desenvolvido no prximo artigo desta sequncia, interno ao mtodo run.

Consideraes FinaisO desenvolvimento de aplicativos para dispositivos mveis muito interessante, principalmente usufruindo dos recursos internos destes, como acelermetro e GPS. Com a necessidade de compra de um Apresentador de Slides para utilizao em palestras e seminrios, tive a idia de criar um aplicativo que enviasse informaes de um Android para a mquina local, onde esta iria processar a solicitao e navegar no documento que est sendo exibido atualmente. Uma pequena idia que tem muito utilidade. Este o primeiro documento da srie sobre como criar uma conexo Bluetooth entre dispositivo Android e um computador, utilizando Java e Bluecove. Voc pode conferir o desenvolvimento do servidor Bluetooth no prximo artigo.

Conexo Bluetooth Android Parte 02: ServidorEste artigo pertence sequncia sobre como criar uma conexo Bluetooth entre Android e um computador local, utilizando Java e a biblioteca Bluecove. Anteriormente foi apresentado como configuramos o Eclipse para o novo projeto com esta biblioteca utilizando arquivos JAR. Ao final, foi apresentada uma pequena estrutura de classe Server, onde ser desenvolvido o servidor Bluetooth. Neste momento vamos ver como abrir um servio Bluetooth na mquina local para que qualquer dispositivo efetue uma conexo, neste caso um Android.

Informaes IniciaisA primeira coisa que devemos fazer configurar um identificador nico de conexo para a conexo que ser feita. Este identificador uma sequncia de caracteres que considerada quase que impossvel de ser gerada em dois aplicativos diferentes. Voc encorajado a gerar outro valor, diferente do exemplo abaixo. Exemplificando, este valor ir trabalhar como o nmero da porta utilizada em conexes TCP/IP. Vale ressaltar que este valor no pode conter nenhum trao, porque a biblioteca no identifica a sequncia como vlida.

3

Para abertura de servio, vamos utilizar o btspp, onde podemos trabalhar com entrada e sada de fluxos de dados, os famosos InputStream e OutputStream. Esta configurao inicial tem o seguinte formato.public void run() { // Identificador nico de Conexo String uuid = "879c3537-ae66-4013-a677-9b7e5339d13c"; // Endereo para Conexo String address = "btspp://localhost:" + uuid.replace("-", ""); }

Vamos agora abrir o servio com as informaes configuradas previamente, utilizando as classes disponibilizadas pela biblioteca Bluecove.

Abertura de ServioExiste uma classe chamada StreamConnectionNotifier que fornece o notificador de conexes. Este notificador criado utilizando um padro de projeto Factory da classe Connector. Para isto, basta informar o endereo de abertura de conexo ao conector e este criar um objeto do tipo notificador. Comparando novamente com uma conexo TCP/IP, o notificador pode ser considerado como a classe ServerSocket utilizada pelo Java para esperar uma conexo do cliente. Aps a criao do notificador, vamos acessar o mtodo bloqueante acceptAndOpen. Isto quer dizer que o programa estar travado neste ponto at que uma conexo cliente entre ou at que seja finalizado. Obviamente, voc deve tratar os erros gerados devidamente, tornando o cdigo mais seguro. O mtodo acessado ir retornar um objeto da classe StreamConnection que trabalha da mesma forma que um socket na conexo TCP/IP. Temos o seguinte cdigo atualmente.public void run() { // Identificador nico de Conexo String uuid = "879c3537-ae66-4013-a677-9b7e5339d13c"; // Endereo para Conexo String address = "btspp://localhost:" + uuid.replace("-", ""); try { // Abertura de Conexo StreamConnectionNotifier notifier = (StreamConnectionNotifier) Connector.open(address); // Fluxo de Conexo StreamConnection stream = notifier.acceptAndOpen(); } catch (IOException e) { // Erro Encontrado e.printStackTrace(); } }

Lembre-se que os mtodos atiram excees e neste local somos obrigados a criar um bloco de manipulao de erros do tipo try..catch. Agora podemos capturar os fluxos de entrada e sada de dados e trabalhar como qualquer tipo de leitura e escrita.

4

Fluxos de Entrada e SadaO Java possui classes para manipulao de dados, com mtodos para tratamento de entrada e sada de informaes. Podemos solicitar ao objeto do tipo StreamConnection estes fluxos da seguinte forma. Lembre-se que este cdigo ainda pertence a estrutura do exemplo anterior e, ao final deste artigo, a classe completa ser apresentada.// Fluxo de Conexo StreamConnection stream = notifier.acceptAndOpen(); // Captura de Fluxos InputStream input = stream.openInputStream(); OutputStream output = stream.openOutputStream();

Podemos trabalhar como qualquer outro fluxo do Java. Para exemplificar, vamos criar um lao de repetio que exibe na sada padro da mquina local uma sequncia de dados enviada pelo cliente. Este lao ser exibido at que o cliente fornea a palavra SAIR ou at que a conexo seja finalizada, gerando uma exceo capturada no bloco try..catch. Durante a execuo do lao, precisamos adicionar informaes de controle ou um pequeno protocolo para transferncia dos dados. Este protocolo possui uma pequena regra: primeiramente deve ser enviado um inteiro contendo quantos bytes sero enviados e aps estes devem ser fornecidos.// Lao de Repetio int size; byte content[]; // Auxiliares de Leitura String message = ""; // Mensagem Enviada pelo Cliente while (!message.equals("SAIR")) { // Tamanho dos Dados size = input.read(); // Quantidade de Bytes // Buffer de Leitura content = new byte[size]; // Preenchimento dos Dados input.read(content); // Entrada de Informao // Transformao da Mensagem Enviada message = new String(content); // Novo Elemento // Exibio na Sada Padro System.out.println(message); }

Primeiramente h a inicializao de variveis que sero utilizadas pelo lao de repetio, auxiliando na leitura do fluxo de entrada de dados. Aps, o lao executado at