本文的目的是提供关于无线蓝牙技术 Java API(即 JSR-82 API)的实践体验。如果您不熟悉蓝牙语 义,不要担心。我将在蓝牙协议简介及其用例(称为蓝牙模式)中介绍这些内容。因为本应用程序将展示 如何使用蓝牙技术向其他蓝牙设备传输图像,所以还将展示如何使用 JSR-75 的 File Connection API 以程序的方式对移动设备进行访问。在本文结束时,将获得能够向远程蓝牙设备传输图像的指导性示例( 及相关文件)。
蓝牙协议
关于蓝牙的一个鲜为人知的事实是:它即便不是世界上配置最为广泛并且最成功的 SOA(面向服务架 构)系统,那么也是其中之一。蓝牙技术得到广泛的安装采用(部署的设备超过 5 亿台),并且当前的 数据估计每周都有另外五百万台蓝牙设备送出。远在“面向服务架构”成为专门术语之前,蓝牙协议就已 经提供了服务注册、服务发现和服务调用机制。
因此,蓝牙协议结合了面向服务架构并采用 HTTP 和 FTP 之类的其他协议中熟悉使用的客户端/服务 器通信架构:在客户端发出请求之前,服务器耐心地等待。当前市场上的蓝牙设备能够以 3 Mb/s 的速率 进行通信,并且可以支持立体声无线音频。以下图 1 显示了蓝牙协议栈的各个层。
图 1:蓝牙协议栈及其层
因为本文的重点是 OBEX,所以我没有讲述图 1 中所有层的细节,但是我确实希望提供关于主要的支 持 OBEX 层的一些详细信息。如您所见,该栈的主要协议层之一是 L2CAP(逻辑链路控制和适配协议)。 L2CAP 用作其他所有上层之间信息包数据的多路复用器。另一方面,RFCOMM 称为“虚拟串行端口”层。 需要与支持数据流的设备通信时,RFCOMM 用起来不错。OBEX(代表对象交换)是最适合文件传输的协议 层。借助 OBEX,可以创建消息并向包含有效载荷(也就是要发送的文件)的远程蓝牙设备发送消息以及 重要元数据(如文件名称、文件大小和文件类型)。
蓝牙模式
蓝牙模式允许各种性能不同的蓝牙设备进行交互和协作。每个模式都是一个针对具体目的定义功能的 用例。例如,如果希望通过移动设备向使用打印机,则两台设备都必须实现基本打印模式。或者例如,如 果要同步台式机和 PDA 的联系人列表,这两台设备必须都支持同步模式。下面的表 1 列出使用蓝牙栈 OBEX 协议层的模式。
表 1. 当前基于 OBEX 的模式
模式名称 | 缩写 | UUID |
对象推送模式 | OPP | 0x1105 |
文件传输模式 | FTP | 0x1106 |
同步模式 | SYP | 0x1104 |
静态图像传输模式 | BIP | 0x111A |
电话簿访问模式 | PBAP | 0x1130 |
基本打印模式 | BPP | 0x1122 |