Ray da Costa

« SQLite | Home | Teste de Software »

Java com Bluetooth

de raydacosta | Quinta, 6 de Agosto de 2009

http://1.bp.blogspot.com/_-2N1RWfuc_A/SCm5qJlBYNI/AAAAAAAAAOE/Cx5Wzsam2ls/s320/Icon-bluetooth.png

Estou estudando o desenvolvimento de aplicativos com Java.

Device Management
As APIs Java Bluetooth LocalDevice e RemoteDevice, que constituem o dispositivo de gestão de capacidades definidas no perfil de acesso genérico.
LocalDevice depende da classe javax.bluetooth.DeviceClass para recuperar o dispositivo do tipo e os tipos de serviços que oferece.
RemoteDevice e uma classe que representa um dispositivo remoto (um dispositivo dentro de uma faixa de alcance) e fornece métodos para obter informações sobre o dispositivo, incluindo o seu nome e endereço Bluetooth. O trecho seguinte código recupera essas informações para o dispositivo local:

LocalDevice local = LocalDevice.getLocalDevice();
String address = local.getBluetoothAddress();
String name = local.getFriendlyName();

———————————————————————————

Você pode obter as mesmas informações sobre um dispositivo remoto:
//Recuperar o dispositivo que está extremo do Bluetooth Serial Port Profile conexão, L2CAP ligação, ou OBEX durante conexão RFCOMM
RemoteDevice remote = RemoteDevice.getRemoteDevice(javax.microedition.io.Connection c);
//Bluetooth recuperar o endereço do dispositivo remoto
String remoteAddress = remote.getBluetoothAddress();
//obter o nome do dispositivo Bluetooth remoto
String remoteName = local.getFriendlyName(true);

———————————————————————————

A classe RemoteDevice também fornece métodos para autenticar, autorizar, ou encriptar os dados transferidos entre local e remoto dispositivos.

Device Discovery
O dispositivos wireless são móveis e necessitam de um mecanismo que lhes permite encontrar outros dispositivos e ter acesso às suas capacidades.
O núcleo Bluetooth API’s DiscoveryAgent classe e DiscoveryListener interface fornecer os serviços necessários descoberta Um dispositivo Bluetooth pode utilizar um objeto DiscoveryAgent para obter uma lista de dispositivos acessíveis, em qualquer das três maneiras:
O DiscoveryAgent.startInquiry método coloca o dispositivo em um modo de inquérito. Para tirar vantagem deste modo, o pedido deve especificar um listener evento que irá responder a inquérito relacionado com eventos.
DiscoveryListener.deviceDiscovered é chamada cada vez que um inquérito encontra um dispositivo. Quando o inquérito for concluído ou cancelado, DiscoveryListener.inquiryCompleted é invocado. Se o dispositivo não pretende esperar por dispositivos a serem descobertos, é possível usar o DiscoveryAgent retrieveDevices para obter uma lista existente. Dependendo do parâmetro passado, este método irá retornar uma lista de dispositivos que foram encontrados em um inquérito anterior, ou uma lista de pré-conhecidos dispositivos que o dispositivo local disse o Bluetooth Control Center irá contactá-lo muitas vezes Estes três trechos código demonstrar as diferentes abordagens:


// recuperar a descoberta agente
DiscoveryAgent agent = local.getDiscoveryAgent();
// coloque o dispositivo no modo de inquérito
boolean complete = agent.startInquiry();


// retrieve the discovery agent
DiscoveryAgent agent = local.getDiscoveryAgent();
// retornar uma array de pré-conhecidas dispositivos
RemoteDevice[] devices = agent.retrieveDevices(DiscoveryAgent.PREKNOWN);


// retrieve the discovery agent
DiscoveryAgent agent = local.getDiscoveryAgent();
// retornar um conjunto de dispositivos encontrados em um inquérito anterior
RemoteDevice[] devices = agent.retrieveDevices(DiscoveryAgent.CACHED);

———————————————————————————–

Service Discovery
Quando o dispositivo local foi descoberto, pelo menos, um dispositivo remoto, ele pode começar a busca por serviços disponíveis -
Aplicações com Bluetooth podem utilizar para realizar tarefas úteis. A escoberta de serviços é muito similar a descoberta de dispositivo, DiscoveryAgent também fornece métodos para descobrir serviços em um servidor de dispositivo Bluetooth, e pode dar abrir uma transacções para descoberta de servicos.
Note que a API fornece mecanismos de pesquisa para serviços em dispositivos remotos, mas não para serviços no dispositivo local.

Serviço de Registro
Antes de um serviço pode ser descoberto, ele deve primeiro ser registrado - anunciados em um servidor de dispositivo Bluetooth. O servidor é responsável por:

Criando um serviço de registro que descreve o serviço oferecido
Adicionando o serviço do servidor de registo para o Serviço de Descoberta DataBase (SDDB), por isso é visível e disponível para clientes potenciais Registrando o Bluetooth as medidas de segurança associados com o serviço (aplicada para as ligações com clientes)
Aceitar conexões de clientes Atualizando o registro no serviço SDDB sempre a mudar os atributos do serviço de remoção ou a desativação do serviço de registro na SDDB quando o serviço não está mais disponível
O seguinte código anotado fragmento dá-lhe um sabor do esforço envolvido no ato do registro de um serviço usando a API Java para Bluetooth:

Para criar um novo serviço de registro que representa o serviço, invocar Connector.open com uma conexão de servidor URL argumento, e infundiu o resultado de uma StreamConnectionNotifier que representa o serviço:

StreamConnectionNotifier service = (StreamConnectionNotifier) Connector.open(”someURL”);

Obter o serviço de registro criados pelo servidor dispositivo:
ServiceRecord sr = local.getRecord(service);

Indicam que o serviço está pronto para aceitar uma conexão cliente:
StreamConnection connection = (StreamConnection) service.acceptAndOpen();
//Note que acceptAndOpen blocos até um cliente se conecta.

Quando o servidor está pronto para sair, feche a conexão e remova o serviço de registo
service.close();

————————————————————————————-

Comunicação
Para um dispositivo local para utilizar um serviço em um dispositivo remoto, os dois dispositivos devem compartilhar um protocolo comum.
Assim que os pedidos podem acessar uma ampla variedade de serviços Bluetooth, as APIs Java para Bluetooth fornecer mecanismos que permitem conexões para qualquer serviço que usa RFCOMM, L2CAP, ou como seu protocolo OBEX. Se um serviço usa outro protocolo (como TCP / IP) uma camada acima destes protocolos, o aplicativo pode acessar o serviço, mas só se aplica o protocolo adicional do pedido, utilizando o CLDC Generic Connection Framework.

O protocolo OBEX pode ser utilizado ao longo de vários transmissão diferentes meios - fios, infravermelhos, Bluetooth rádio, e outros - JSR 82 implementa o OBEX API (javax.obex) independente do núcleo Bluetooth API (javax.bluetooth). O OBEX API é um pacote separado opcional você pode usar tanto com o núcleo pacote Bluetooth ou de forma independente.

Serial Port Profile RFCOMM O protocolo, que é a camada mais L2CAP protocolo, emula uma conexão serial RS-232. O Serial Port Profile (SPP) facilita a comunicação entre dispositivos Bluetooth, fornecendo um fluxo baseado em interface com o protocolo RFCOMM Algumas capacidades e limitações a serem observados:

Dois dispositivos podem compartilhar um único RFCOMM sessão em um tempo. Até 60 lógico serial ligações podem ser multiplexagem durante esta sessão. Um único dispositivo Bluetooth pode ter no máximo 30 ativos RFCOMM serviços. Um dispositivo pode suportar apenas uma ligação para um determinado cliente de serviço de uma vez.

Para um servidor e cliente para se comunicar usando a porta serial perfil, cada um deve executar algumas etapas simples.

Construa uma URL que indica como se conectar ao serviço, e armazená-la no serviço de registro Faça o serviço de registro à disposição do cliente Aceitar uma ligação entre o cliente enviar e receber dados de e para o cliente.

btspp://102030405060740A1B1C1D1E100:5

Este diz que um cliente deve utilizar o Bluetooth Serial Port Profile para estabelecer uma ligação a este serviço, que é identificada com o servidor canal 5, em um dispositivo cujo endereço é 102030405060740A1B1C1D1E100.


// aassumindo que o serviço tenha sido recuperada UID
String serviceURL = “btspp://localhost:”+serviceUID.toString());
// more explicitly:
String ServiceURL = “btspp://localhost:10203040607040A1B1C1DE100;name=SPP Server1″;
try {
// create a server connection
StreamConnectionNotifier notifier = (StreamConnectionNotifier) Connector.open(serviceURL);
// accept client connections
StreamConnection connection = notifier.acceptAndOpen();
// prepare to send/receive data
byte buffer[] = new byte[100];
String msg = “hello there, client”;
InputStream is = connection.openInputStream();
OutputStream os = connection.openOutputStream();
// send data to the client
os.write(msg.getBytes());
// read data from client
is.read(buffer);
connection.close();
} catch(IOException e) {
e.printStackTrace();
}

fonte

Matrial sobre o assunto
http://www.guj.com.br/posts/list/47261.java
http://developers.sun.com/techtopics/mobility/midp/articles/bluetooth1/
http://developers.sun.com/techtopics/mobility/midp/articles/bluetooth2/
http://developers.sun.com/techtopics/mobility/apis…cles/bluetoothintro/index.html
http://developers.sun.com/techtopics/mobility/apis…icles/bluetoothcore/index.html
http://br.geocities.com/j2me_website/home.html
http://fivedots.coe.psu.ac.th/~ad/jg/blue1/index.html
http://fivedots.coe.psu.ac.th/~ad/jg/blue2/index.html
http://www.jsr82.com/simulating-jabwt-applications-using-jsr-82-simulators/
http://books.google.com.br/books?id=0dsIPdbr4o8C&pg=PA44&lpg=PA44&dq=simulating+jabwt+download&source=bl&ots=8330K3VWKB&sig=2-D3Cg2FlgCctWuRddLeXVwNDys&hl=pt-BR&ei=If16SrP4POGQtgff7rzjAQ&sa=X&oi=book_result&ct=result&resnum=3#v=onepage&q=&f=false
http://www.jsr82.com/


















Attribute NameAttribute IDAttribute Value Type
ServiceRecordHandle0x000032-bit unsigned integer
ServiceClassIDList0x0001DATSEQ of UUIDs
ServiceRecordState0x000232-bit unsigned integer
ServiceID0x0003UUID
ProtocolDescriptorList0x0004DATSEQ of DATSEQ of UUID and optional parameters
BrowseGroupList0x0005DATSEQ of UUIDs
LanguageBasedAttributeIDList0x0006DATSEQ of DATSEQ triples
ServiceInfoTimeToLive0x000732-bit unsigned integer
ServiceAvailability0x00088-bit unsigned integer
BluetoothProfileDescriptorList0x0009DATSEQ of DATSEQ pairs
DocumentationURL0x000AURL
ClientExecutableURL0x000BURL
IconURL0x000CURL
VersionNumberList0x0200DATSEQ of 16-bit unsigned integers
ServiceDatabaseState0x020132-bit unsigned integer










































































Data Type Valid Values
NULL represents a null value
U_INT_1
long
value range [0, 255]
U_INT_2 long value range [0, 216-1]
U_INT_4 long value range [0, 232-1]
U_INT_8 byte[] value range [0, 264-1]
U_INT_16 byte[] value range [0, 2128-1]
INT_1 long value range [-128, 127]
INT_2 long value range [-215, 215-1]
INT_4 long value range [-231, 231-1]
INT_8 long value range [-263, 263-1]
INT_16 byte[] value range [-2127, 2127-1]
URL java.lang.String
UUID javax.bluetooth.UUID
BOOL boolean
STRING java.lang.String
DATSEQ java.util.Enumeration
DATALT java.util.Enumeration

Categorias: J2ME |  | Enviar por e-mail  | Hits para esta publicação: 735

2 comentários para “ Java com Bluetooth ”

  1. Peter Says:
    Sábado, 8 de Agosto de 2009 at 02:45

    Are you a professional journalist? You write very well.

  2. npoet.ru Says:
    Sábado, 8 de Agosto de 2009 at 16:18

    I’ll take some of your suggestions and try to apply them.

Deixe uma resposta.