使用Java和BlueCove开发蓝牙数据传输客户端的详细指南
由于项目原因。在电脑上开发一个通过蓝牙传输数据的客户端。我使用JAVA和JSME开发。

客户端:搜索蓝牙信号,然后找到对应的蓝牙信号进行连接。
服务器:客户端需要连接的蓝牙信号。
PCserver端还需要一个开源组件BlueCove。该组件实现了JSR-82 Java蓝牙规范,屏蔽了底层操作系统级原生蓝牙协议栈各种功能的封装。
需要这个组件的原因是J2SE没有实现JSR-82标准协议。
我正在使用 bluecove-2.0.3.jar。
您还需要 commons-io jar 包。我用的是2.2的jar包。
Java 蓝牙 API 依赖于 Java 通用连接框架。这一直是 Java 蓝牙 API 应用程序的限制。然而,人们建议将 GCF 添加到 J2SE 中。
Java 蓝牙 API 使得访问许多其他系统成为可能。
Java蓝牙API定义了两个包:一个是javax.bluetooth,它是Java蓝牙API的核心。还有用于对象交换协议的 javax.obex (OBEX)。
任何蓝牙应用程序都具有以下组件:堆栈初始化组件、设备管理组件和设备发现组件。服务发现组件和通信组件。
JSR82 规范引入了两个设备管理类:LocalDevice 和 RemoteDevice。
LocalDevice 同意您获取有关蓝牙设备的静态信息的请求。它依赖于 javax.bluetooth.DeviceClass 类来获取设备类型及其提供的服务类型。
RemoteDevice 可用于获取蓝牙邻居中的设备信息(例如远程蓝牙设备的地址)。
它代表一个远程设备(例如,可达范围内的设备),并提供获取设备相关信息的方法,包括其蓝牙地址和名称。
每个蓝牙设备都有一个唯一的硬件地址。就像计算机的 MAC 地址一样。您可以通过调用LocalDevice对象中的setDiscoverable()方法来设置设备发现的级别,使其他蓝牙设备能够发现当前设备。
设备发现
无线设备需要一种允许它们发现其他设备并访问其功能的机制。核心蓝牙 API 的 DiscoveryAgent 类和 DiscoveryListener 接口提供必要的发现服务。可通过三种方式获取可访问设备的列表。 DiscoveryAgent.startInquiry() 方法将设备设置为查询模式。要充分利用此模式,应用程序必须指定一个事件侦听器来对与查询相关的事件做出反应。当查询完成或取消时,将调用 DiscoveryListener.inquiryCompleted() 方法。
服务发现
服务发现允许您发现附近的服务。无论哪个设备提供服务。 DiscoveryAgent提供的方法可以用于发现蓝牙服务设备上的服务。并初始化服务发现事务。
在发现服务之前,必须首先在蓝牙服务设备上注册或广播该服务。
服务设备负责完成许多任务,包括创建描述所提供的服务的服务记录、接受来自客户端的连接以及向服务设备的服务发现数据库(SDDB)添加新的服务记录。
我使用的软件是我以前编写Android程序时使用的ADT集成开发工具。
32位java开发环境。
PC 使用蓝牙适配器并安装了 BlueSoleil_.6.v6.4.249。
以下是我在PC端开发时遇到的问题
1、由于BlueCove尚未更新,该jar包只能在32位Java环境中使用,在64位Java开发环境中会报错。
1.端口错配[4]和[5]
问题描述:蓝牙虚拟端口与您电脑上的蓝牙端口不匹配。
解决:
蓝牙适配器的“我的设备属性”——串口——只剩下一个串口,活动连接为“否”,连接方向为“传出”。
删除剩余端口号,或者直接通过经典蓝牙界面删除蓝牙。再次搜索连接
2.连接失败
解决:
如果未安装驱动程序,请右键单击设备管理器中的感叹号,然后选择在线安装驱动程序。