使用Java蓝牙无线通讯技术API(第一部分 -API概览)(2)
2008-01-05 19:09:28 来源:WEB开发网 闂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾惧綊鏌熼梻瀵割槮缁炬儳缍婇弻鐔兼⒒鐎靛壊妲紒鐐劤缂嶅﹪寮婚悢鍏尖拻閻庨潧澹婂Σ顔剧磼閻愵剙鍔ょ紓宥咃躬瀵鎮㈤崗灏栨嫽闁诲酣娼ф竟濠偽i鍓х<闁诡垎鍐f寖闂佺娅曢幑鍥灳閺冨牆绀冩い蹇庣娴滈箖鏌ㄥ┑鍡欏嚬缂併劎绮妵鍕箳鐎n亞浠鹃梺闈涙搐鐎氫即鐛崶顒夋晬婵絾瀵ч幑鍥蓟閻斿摜鐟归柛顭戝枛椤牆顪冮妶搴′簼缂侇喗鎸搁悾鐑藉础閻愬秵妫冮崺鈧い鎺戝瀹撲礁鈹戦悩鎻掝伀缁惧彞绮欓弻娑氫沪閹规劕顥濋梺閫炲苯澧伴柟铏崌閿濈偛鈹戠€n€晠鏌嶆潪鎷屽厡闁汇倕鎳愮槐鎾存媴閸撴彃鍓卞銈嗗灦閻熲晛鐣烽妷褉鍋撻敐搴℃灍闁绘挻娲橀妵鍕箛闂堟稐绨肩紓浣藉煐濮樸劎妲愰幘璇茬闁冲搫鍊婚ˇ鏉库攽椤旂》宸ユい顓炲槻閻g兘骞掗幋鏃€鐎婚梺瑙勬儗閸樺€熲叺婵犵數濮烽弫鍛婃叏椤撱垹纾婚柟鍓х帛閳锋垶銇勯幒鍡椾壕缂備礁顦遍弫濠氱嵁閸℃稒鍊烽柛婵嗗椤旀劕鈹戦悜鍥╃У闁告挻鐟︽穱濠囨嚃閳哄啰锛滈梺褰掑亰閸欏骸鈻撳⿰鍫熺厸閻忕偟纭堕崑鎾诲箛娴e憡鍊梺纭呭亹鐞涖儵鍩€椤掑啫鐨洪柡浣圭墪閳规垿鎮欓弶鎴犱桓闂佸湱枪閹芥粎鍒掗弮鍫熷仺缂佸顕抽敃鍌涚厱闁哄洢鍔岄悘鐘绘煕閹般劌浜惧┑锛勫亼閸婃牠宕濋敃鈧…鍧楀焵椤掍胶绠剧€光偓婵犱線鍋楀┑顔硷龚濞咃絿妲愰幒鎳崇喓鎷犻懠鑸垫毐闂傚倷鑳舵灙婵炲鍏樺顐ゆ嫚瀹割喖娈ㄦ繝鐢靛У绾板秹寮查幓鎺濈唵閻犺櫣灏ㄥ銉р偓瑙勬尭濡繂顫忛搹鍦<婵☆垰鎼~宥囩磽娴i鍔嶉柟绋垮暱閻g兘骞嬮敃鈧粻濠氭偣閸パ冪骇鐎规挸绉撮—鍐Χ閸℃ê闉嶇紓浣割儐閸ㄥ墎绮嬪澶嬪€锋い鎺嶇瀵灝鈹戦埥鍡楃仯闁告鍕洸濡わ絽鍟崐鍨叏濡厧浜鹃悗姘炬嫹

核心提示:数据元素类 一个服务可以有许多的属性,一些是强制性的,使用Java蓝牙无线通讯技术API(第一部分 -API概览)(2),其他的是可选的,一个服务属性由一个数据元素对象来表现,以使他们处理蓝牙连通时获得更好的效率, 如同所有的GCF连接类型,这个数据元素对象提供了设置并取得属性值的方法, 强制性属性是在注册一个服
数据元素类
一个服务可以有许多的属性,一些是强制性的,其他的是可选的。一个服务属性由一个数据元素对象来表现,这个数据元素对象提供了设置并取得属性值的方法。
强制性属性是在注册一个服务之后被自动设定的。这些属性包括:ServiceRecordHandle,ServiceClassIDList, ServiceRecordState, ServiceID, 还有 PRotocolDescriptorList。
假如你想要的话,还可以设置可选属性。可选属性有很多,但是有三个值得关注:ServiceName,ServiceDescription, 和 ProviderName。
想得到更多的关于这些属性的信息,请参看JABWT的文档或蓝牙规范。
设备治理API
有3个主要的类来支持设备治理:
.LocalDevice
.RemoteDevice
.DeviceClass
本地设备类
LocalDevice类标识了本地蓝牙设备。蓝牙应用程序和LocalDevice之间的关系是典型的一对一关系:

.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的实例代表了一个远端蓝牙设备。在一个蓝牙客户端应用程序可以进行服务,消费之前,它必须发送一个设备请求来发现远端设备。典型的蓝牙应用程序和远端设备之间的关系是一对多:

.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形式的各接口通过蓝牙网络进行通信的过程:

处理L2CAP连接比处理流连接更复杂。使用L2CAP时,开发者们必须处理好最大消息的大小(即最大传输单位,或叫做MTU)、打断和重组等。这些复杂的事项在开发者使用流连接的时候被隐藏了,以使他们处理蓝牙连通时获得更好的效率。
如同所有的GCF连接类型,你可以通过调用GCF连接工厂方法javax.microedition.io.Connector创建蓝牙连接。传递给Connector()方法的连接URL决定了要创建的连接类型:
一个L2CAPConnection连接的URL格式:
BTspp://hostname:[CN UUID];parameters
一个RFCOMMStreamConnection连接的URL格式:btspp://hostname:[CN UUID];parameters
更多精彩
赞助商链接