当前页面位置: » 丰搜网 » 文档中心 » 详细内容
使用java蓝牙无线通讯技术api概述之二
一个服务可以有许多的属性,一些是强制性的,其他的是可选的。一个服务属性由一个数据元素对象来表现,这个数据元素对象提供了设置并取得属性值的方法。
强制性属性是在注册一个<-- copyright 1999-2000 thruport technologies http://www.thruport.com --><-- end dynamic banner insert -->服务之后被自动设定的。这些属性包括:servicerecordhandle,serviceclassidlist,servicerecordstate,serviceid,还有protocoldescriptorlist。
如果你想要的话,还可以设置可选属性。可选属性有很多,但是有三个值得关注:servicename,servicedescription,和providername。想得到更多的关于这些属性的信息,请参看jabwt的文档或蓝牙规范。
设备管理api
有3个主要的类来支持设备管理:
.localdevice
.remotedevice
.deviceclass
本地设备类localdevice类标识了本地蓝牙设备。蓝牙应用程序和localdevice之间的关系是典型的一对一关系:
图 10:本地设备类本地设备提供了方法来返回关于本地设备的信息,并且能够进入bluetooth manager:
.getbluetoothaddress()返回蓝牙设备地址。
.getdeviceclass()返回设备类。
.getfriendlyname()返回设备友好名称,蓝牙设备名通常是用户在蓝牙控制中心为其设置的我们将会在后面看到。
.getrecord()返回一个指定蓝牙连接的服务记录。
.updaterecord()方法用来为指定的servicerecord更新sddb服务记录。
.getdiscoverable()返回设备的可发现状态。
.setdiscoverable()设置设备的可发现状态。
.getdiscoveryagent()返回一个参考给发现代理。
.getproperty()返回一个设备的蓝牙属性。
通过调用getproperty()方法你可以得到的属性包括:
.bluetooth.api.version,蓝牙api版本
.bluetooth.sd.attr.retrievable.max,一次性能够被获得的服务记录属性的最大值
.bluetooth.connected.devices.max,支持的连接设备的最大值
.bluetooth.sd.trans.max,同时发生的服务发现处理的最大值
.bluetooth.l2cap.receivemtu.max,l2cap最大发射单元
你可以在
javadoc文档中或是规范中学习更多的有关蓝牙属性的内容。
远端设备类
一个remotedevice的实例代表了一个远端蓝牙设备。在一个蓝牙客户端应用程序可以进行服务,消费之前,它必须发送一个设备请求来发现远端设备。典型的蓝牙应用程序和远端设备之间的关系是<-- copyright 1999-2000 thruport technologies http://www.thruport.com --><-- end dynamic banner insert -->一对多:
图 11: 远端设备类远端设备(remotedevice)提供的方法中,有些很类似于本地设备(localdevice)里提供的方法:
.getbluetoothaddress()返回蓝牙地址。
.getfriendlyname()返回蓝牙设备名。
.getremotedevice()返回相应的被指定蓝牙连接的远端设备。
.authenticate()尝试识别验证远端设备。
.authorize()为指定的蓝牙连接去尝试批准远端设备访问本地设备。
.encrypt()尝试为指定的蓝牙连接开启或关闭
加密。
.isauthenticated()
测试是否远端设备可以被验证。
.isauthorized()
测试是否远端设备已经被蓝牙控制中心授权访问本地设备以进行蓝牙连接。
.isencrypted()
测试是否本地设备和远端设备之间的通信被
加密。
.istrusteddevice()
测试是否远端设备被蓝牙控制中心指定为可信任的。
deviceclass类一个deviceclass对象代表一个设备的设备类(cod),例如一个打印机或者一部电话。cod包括一个主类,一个辅的类,和服务类型或服务类。deviceclass提供了如下方法:
.getmajordeviceclass()方法获取设备的主类。
.getminordeviceclass()方法获取设备的辅类。
.getserviceclasses()获取设备的服务类。
当一个设备被发现,同时他的类也会被发现;当发现代理调用devicediscovered()时,其中一个参数就是deviceclass。你可以通过它的getdeviceclass()方法找到本地设备的cod。
蓝牙通信
jabwt连接是基于逻辑链路及适配层协议的。l2cap是一个低级协议用来管理数据包,直到达到64k。l2cap中的处理细节像消息分割和重组(sar),多路连接。另外,串口profile(spp)提供rfcomm,一个通过l2cap层的串行模拟协议。
l2cap和rfcomm连接都是基于通用连接
框架(gcf)的,直接通向接口和类的层次去创建连接和执行io命令。jabwt依靠l2cap和rfcomm协议扩展了通用连接
框架(gcf)以分别支持通过l2capconnection 和streamconnection类型连接。
就在l2capconnection被
jsr 82介绍的同时,streamconnection在原始的
javax.microedition.io的gcf中被定义了,它是依靠cldc发展来的。注意,jabwt中l2capconnection仅支持面向连接的l2cap连接。图12显示了以基于gcf形式的各接口通过蓝牙网络进行通信的过程:
图 12: 通用连接框架和蓝牙连接类型层次定义了l2cap和stream的连接和连接通知器。一个连接定义了一个连接终端,当一个连接通知器执行了服务行为时,它会等待并接受l2cap连接处理。
处理l2cap连接比处理流连接更复杂。使用l2cap时,开发者们必须处理好最大消息的大小(即最大传输单位,或叫做mtu)、打断和重组等。这些复杂的事项在开发者使用流连接的时候被隐藏了,以使他们处理蓝牙连通时获得更好的效率。
如同所有的gcf连接类型,你可以通过调用gcf连接工厂方法
javax.microedition.io.connector创建蓝牙连接。传递给connector()方法的连接url决定了要创建的连接类型:一个l2capconnection连接的url格式:
btspp://hostname:[cn uuid];parameters |
一个rfco
mmstreamconnection连接的url格式:
btspp://hostname:[cn uuid];parameters |
细节介绍:
.btl2cap 是为l2capconnection设计的url配置方案。
.btspp是为rfcomm streamconnection的url配置方案。
<-- copyright 1999-2000 thruport technologies http://www.thruport.com --><-- end dynamic banner insert -->
.hostname 既可是localhost用于架设一个
服务器连接,也可是一个用于创建客户端连接的蓝牙地址。
.psm是协议/服务多路复用值,在一个客户端连接
服务器端时使用。在概念上是模拟一个tcp/ip端口。
.cn是信道数值,在一个客户端连接
服务器端时使用,也是模拟tcp/ip端口。
.uuid是uuid(通用唯一标识符)值,在一个
服务器上建立服务时使用。
.parameters(参数)包括描述服务名称的名字和有于
安全的参数:验证、授权和
加密。
服务器连接和客户端连接
在连接的url中,主机名称告诉连接工厂是否它应该创建一个客户端异或
服务器端。如果使用单词localhost作为主机名将定义一个
服务器连接。客户端想要连接到一个指定的的服务可以通过调用servicerecord.getconnectionurl()来找到该服务连接的url。
[1] [2] 下一页