数据元素类
一个服务可以有许多的属性,一些是强制性的,其他的是可选的。一个服务属性由一个数据元素对象来表现,这个数据元素对象提供了设置并取得属性值的方法。
强制性属性是在注册一个服务之后被自动设定的。这些属性包括: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的实例代表了一个远端蓝牙设备。在一个蓝牙客户端应用程序可以进行服务,消费之前,它必须发送一个设备请求来发现远端设备。典型的蓝牙应用程序和远端设备之间的关系是一对多:
图 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
一个RFCOMMStreamConnection连接的URL格式:
btspp://hostname:[CN | UUID];parameters
细节介绍:
.btl2cap 是为L2CAPConnection设计的URL配置方案。
.btspp是为RFCOMM StreamConnection的URL配置方案。
.hostname 既可是localhost用于架设一个服务器连接,也可是一个用于创建客户端连接的蓝牙地址。
.PSM是协议/服务多路复用值,在一个客户端连接服务器端时使用。在概念上是模拟一个TCP/IP端口。
.CN是信道数值,在一个客户端连接服务器端时使用,也是模拟TCP/IP端口。
.UUID是UUID(通用唯一标识符)值,在一个服务器上建立服务时使用。
.parameters(参数)包括描述服务名称的名字和有于安全的参数:验证、授权和加密。
服务器连接和客户端连接
在连接的URL中,主机名称告诉连接工厂是否它应该创建一个客户端异或服务器端。如果使用单词localhost作为主机名将定义一个服务器连接。客户端想要连接到一个指定的的服务可以通过调用ServiceRecord.getConnectionURL()来找到该服务连接的URL。
异常
javax.bluetooth核心API定义了三个异常类:
.当一个蓝牙L2CAP、RFCOMM或是OBEX-over-RFCOMM连接不能被成功建立会抛出BluetoothConnectionException异常。
.一个试图在错误状态下进行蓝牙操作时,会抛出BluetoothStateException异常。
.当在本地服务发现数据库(SDDB)中,添加或改变服务记录失败时,会抛出ServiceRegistrationException异常。
蓝牙安全
一个安全的蓝牙连接应该是经过验证、可选的获得授权和被加密过的。这样,蓝牙连接在建立之初或以后就可以保证其安全性了。
注意:不是所有的蓝牙实现都提供了安全连接的。
为了在建立一个蓝牙连接时使其安全,就要给javax.microedition.io.Connector在连接URL字符串上提供适当的安全参数: btspp://hostname:[CN | UUID];authenticate=true;authorize=true;encrypt=true
Where:
.authenticate验证一个连接设备的身份。
.authorize授权一个连接中的设备(已被识别)是否被允许进入。
.encrypt指定连接需被加密。
你已经看到了想要连接到一个服务的客户端可以通过调用ServiceRecord.getConnectionURL()方法以获得服务连接的URL。该方法中的一个参数requiredSecurity,指定了返回的这个连接URL是否应该包含可选的authenticate和encrypt等安全参数。关于requiredSecurity的有效值为:
.ServiceRecord.NOAUTHENTICATE_NOENCRYPT意为authenticate=false; encrypt=false。
.ServiceRecord.AUTHENTICATE_NOENCRYPT意为authenticate=true; encrypt=false。
.ServiceRecord.AUTHENTICATE_ENCRYPT意为authenticate=true; encrypt=true。
例如:
...
ServiceRecord sr = ...;
...
String connURL = sr.getConnectionURL(ServiceRecord.AUTHENTICATE_ENCRYPT, false);
...
如果不在建立一个连接的时候就使用这种方法保证安全性,你也可以在以后确保其安全性,这就要使用一组已知的远端设备的安全方法:authenticate(),authorize()和 encrypt()。如果你这样做了请注意,验证必须在授权和加密之前进行。
蓝牙控制中心
蓝牙控制中心(BCC)是设备上的一个管理软件,它负责在作为授权中心改变本地蓝牙的设置,包括:打开或关闭蓝牙无线电,设置友好名称以便在设备发现过程中进行广播,开启或屏蔽设备的发现模式,设置PIN码,设置缺省安全属性等等。BCC看上去表现如何全看实现的具体情况。
在Sun Wireless Toolkit中对蓝牙的支持
J2ME Wireless Toolkit 2.2支持JABWT。toolkit的Preferences Utility(使用偏好)提供了新的Bluetooth/OBEX标签以进行蓝牙参数设置。在此栏下OBEX设置和三个蓝牙子标签,它们分别是:Internal Properties(内部属性)标签允许你设置设备搜索的超时时间,System Properties(系统属性)标签允许你定义一些调用LocalDevice.getProperty()方法便可得到蓝牙属性。BCC Properties
分享到:
相关推荐
**J2ME蓝牙编程详解** Java 2 Micro Edition (J2ME) 是一种Java平台,专为嵌入式设备和移动设备设计,如早期的智能手机和平板电脑。它提供了丰富的功能,包括支持无线通信,其中就包括蓝牙(Bluetooth)编程。在...
【J2ME手机蓝牙聊天系统】是一个利用Java 2 Micro Edition (J2ME) 技术实现的移动设备间通信的应用。J2ME是Java平台的一个子集,专门设计用于资源有限的嵌入式设备,如手机和PDA。在这个系统中,用户可以通过手机的...
【标题】"j2me 蓝牙游戏 多人贪吃蛇"揭示了这是一个基于Java 2 Micro Edition (J2ME) 平台开发的蓝牙联机游戏,游戏的主题是多人同时参与的贪吃蛇游戏。J2ME是Java平台的一个子集,主要用于移动设备和嵌入式系统的...
J2ME蓝牙编程.pdfJ2ME蓝牙编程.pdfJ2ME蓝牙编程.pdfJ2ME蓝牙编程.pdfJ2ME蓝牙编程.pdf
简单j2me蓝牙OBEX传文件代码 http://blog.csdn.net/xiaoxiao108/archive/2011/03/10/6237233.aspx 最近想写一手机程序实现以下功能,在蓝牙的有效距离内,如果有其他手机的蓝牙设置为可见状态,自己的手机自动向其他...
本教程将深入探讨J2ME蓝牙用例,重点讲解如何实现图片的发布和接受。 首先,我们需要理解J2ME中的蓝牙API。Java Micro Edition Wireless Toolkit(J2ME WTK)提供了Bluetooth API,包括 javax.microedition.io....
《J2ME蓝牙版飞机大战游戏》是一款基于Java 2 Micro Edition (J2ME) 平台开发的经典对战游戏,充分利用了J2ME的移动设备特性,特别是其蓝牙通信功能,让玩家可以在两个设备之间进行实时的空中对决。这款游戏中,玩家...
《J2ME蓝牙实战入门》文档主要介绍了如何利用Java Micro Edition (J2ME)平台中的JSR82规范来开发蓝牙应用。JSR82,全称为Java APIs for Bluetooth Wireless Technology,提供了一套API,使得开发者能够在支持蓝牙的...
标题中的“demo.rar_DEMO_j2me 蓝牙”表明这是一个关于Java ME(J2ME)平台上的蓝牙应用示例。J2ME是Java的一种轻量级版本,主要用于移动设备和嵌入式系统,例如早期的智能手机和平板电脑。这个压缩包可能包含了用于...
《基于J2ME蓝牙的手机与计算机通信系统设计》这篇毕业论文主要探讨了如何利用Java Micro Edition(J2ME)平台实现手机与计算机之间的无线通信,尤其是通过蓝牙技术进行数据交换。本文将深入解析该系统的设计原理、...
【J2ME蓝牙五子棋游戏源代码】是一款专为移动设备设计的、基于Java Micro Edition(J2ME)平台的轻量级游戏。这款五子棋游戏利用了J2ME提供的蓝牙通信功能,使玩家可以通过手机之间的蓝牙连接进行对战,增加了游戏的...
这些示例不仅展示了API的基本用法,还提供了处理常见问题和错误的方法,是学习J2ME蓝牙编程的宝贵资源。 ### 5. J2ME蓝牙编程面临的挑战 尽管JABWT简化了许多蓝牙编程任务,但实际应用中仍存在不少挑战。例如,...
"J2ME蓝牙游戏的对战分析"这一主题聚焦于利用J2ME技术创建支持蓝牙对战的手机游戏,如五子棋。本文将深入探讨J2ME游戏开发的关键技术和蓝牙对战功能的实现。 一、J2ME基础知识 J2ME是Java平台的一个子集,专为资源...
**标题解析:** "j2me 蓝牙 编程 被初学者看得更懂" 这个标题表明了资源...以上这些知识点将构成J2ME蓝牙编程的基础,对于初学者来说,逐步掌握这些内容可以让他们从理论到实践,最终能够独立完成蓝牙相关应用的开发。
《J2ME蓝牙五子棋游戏源代码解析》 J2ME(Java 2 Micro Edition)是Java平台的一个分支,专为嵌入式设备和移动设备设计,如早期的智能手机和平板电脑。在这个环境中,开发者可以创建丰富的应用程序,包括游戏。标题...
这个名为"j2me蓝牙_客户端_服务端_类.rar"的压缩包文件包含了一个基于Java ME(J2ME)平台的蓝牙开发示例,涵盖了客户端、服务端以及相关的类。下面我们将深入探讨这些知识点。 首先,Java ME(Java 2 Micro ...
### 在J2ME中开发蓝牙无线软件的知识点详解 #### 一、引言 随着移动通信技术的发展,越来越多的移动设备开始支持Java软件。其中,Java 2 Micro Edition (J2ME) 因其轻量级特性而在移动设备上特别受欢迎。特别是针对...
在开发过程中,你可以利用模拟器测试应用,NetBeans自带了一些J2ME设备的模拟器,如Nokia S60、BlackBerry等。模拟器可以帮助你在没有实际设备的情况下预览和测试应用程序的行为。当然,最终的测试应在目标设备上...
蓝牙通信在J2ME中主要依赖JSR-82(Java API for Bluetooth Wireless Technology),这是一个Java规范,定义了在Java应用程序中使用蓝牙接口的方法。开发者需要学习如何使用JSR-82中的`javax.bluetooth`包,包含了一...