首页 > 代码库 > PC端 java 开发蓝牙所遇到的问题

PC端 java 开发蓝牙所遇到的问题

由于项目的原因。要在电脑上开发一个通过蓝牙传送数据的client。我採用的是JAVA,JSME开发。

client:去搜素蓝牙信号,然后找到对应的蓝牙信号进行连接。

服务端:client须要进行连接的蓝牙信号。

在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定义了两个包:一个是Java蓝牙API的核心javax.bluetooth。还有一个是用于对象交换协议的javax.obex(OBEX)。

 不论什么蓝牙应用都有下面这些组件:堆栈初始化组件,设备管理组件,设备发现组件。服务发现组件和通讯组件。

JSR82规范介绍了用于设备管理的两个类:LocalDevice 和 RemoteDevice.

 

 LocalDevice 同意你请求获得蓝牙设备的静态信息。它依靠javax.bluetooth.DeviceClass类来获得设备类型和它所提供的服务类型。

 

RemoteDevice可用来获得蓝牙邻近区的设备信息(比如,某个远程蓝牙设备的地址)。

它能够代表一台远程设备(比如,一台在可到达范围内的设备),并提供对应的方法来获得关于这台设备的有关信息,包含它的蓝牙地址和名称。

每一个蓝牙设备有一个唯一的硬件地址。像计算机的MAC地址一样。你能够设定设备发现的级别,通过调用LocalDevice 对象中的setDiscoverable()方法能够使得其他蓝牙设备发现当前设备。

设备发现

无线设备须要一种机制来同意它们发现其他的设备并訪问它们的功能。核心蓝牙API的DiscoveryAgent 类和DiscoveryListener接口提供了须要的发现服务。有三种方式获得可訪问设备列表。DiscoveryAgent.startInquiry()方法可将设备设置为查询模式。为了充分利用这样的模式,应用必须要指定一个事件监听器来对与查询相关的事件作出反应。当查询完毕或取消时,会调用DiscoveryListener.inquiryCompleted()方法。

服务发现

服务发现同意你发现附近的服务。而无论哪一台设备提供的该服务。DiscoveryAgent提供的方法能够用来发现蓝牙服务设备上的服务。并初始化服务发现事务。

在服务能够被发现曾经,必须首先在蓝牙服务设备上注冊或广播该服务。

服务设备负责完毕非常多任务,包含创建描写叙述所提供的服务的服务记录,接受来自client的连接,向服务设备的服务发现数据库(SDDB)加入新的服务记录。

我使用的软件是我之前编android的ADT集成开发工具。

32位的java开发环境。

PC端使用的是蓝牙适配器,安装了BlueSoleil_.6.v6.4.249。

以下是我在PC端开发时遇到的问题

1.因为BlueCove没有更新过的原因 ,该jar包仅仅在32的java环境下才干够使用,64位的java开发环境会报错。

1.Port mismarch [4]and [5]

说明:蓝牙的虚拟port和你PC上的蓝牙port不匹配

技术分享

解决:

在蓝牙适配器的“我的设备属性”中--串口--仅仅留一个串口且自己主动连接为否,连接方向为连出

删除其余的port号,或者直接通过经典蓝牙界面将蓝牙删除。又一次搜索连接

2.connect failed

解决:

驱动没安装好,在设备管理器右键感叹号选择联机安装驱动就可以。

PC端 java 开发蓝牙所遇到的问题