【问题标题】:Java desktop bluetooth client can not find servicesJava桌面蓝牙客户​​端找不到服务
【发布时间】:2015-01-26 15:13:30
【问题描述】:

我是蓝牙编程的新手,所以请记住这一点。

我正在尝试从台式电脑连接到脉搏传感器,特别是 Zephyr HxM BT。我没有使用任何设备特定的驱动程序,我使用的 Java 蓝牙库是 Bluecove,我的蓝牙堆栈是 BlueSoleil。

据我了解,我的做法是

1) 扫描蓝牙设备

public void startSearch() throws BluetoothStateException{
    System.out.println("Inquiry started");
    localdevice.getDiscoveryAgent().startInquiry(DiscoveryAgent.GIAC, this);
}

这很好用,它会发现我的脉搏带并调用

public void deviceDiscovered(RemoteDevice arg0, DeviceClass arg1)

2) 在设备中搜索服务

一旦发现设备,就应该将其添加到 DiscoveryAgent 的缓存设备列表中,这是我的第一个问题,因为即使我发现了我的腰带,缓存(和预先知道的设备)总是空的。

所以我现在这样做的方式是保留我自己的设备列表,或者直接从 deviceDiscovered 开始服务搜索。

我仍然有点不确定我是否使用了正确的参数,但是通过阅读 BT 设备手册和 DiscoveryAgent.searchServices 上的 javax.bluetooth 文档:

public int searchServices(int[] attrSet,
                      UUID[] uuidSet,
                      RemoteDevice btDev,
                      DiscoveryListener discListener)
               throws BluetoothStateException

我的代码:

public void searchServices(RemoteDevice device){
    UUID[] uuidSet = new UUID[1];
    uuidSet[0]=new UUID("1101",false); //Serial Port
    System.out.println("Searching for services on " + device.getBluetoothAddress() );
    try{
    agent.searchServices(null,uuidSet, device,this);}
    catch (BluetoothStateException e){
    System.out.println("BluetoothStateException caught.");
    }

    }

我已将 attributes 参数设置为 null,因为文档说明这将让它搜索具有默认属性的服务,但是我也尝试仅使用 ServiceID (0x0003) 作为属性,但没有成功。

这是我卡住的地方,我将正确的 BT 设备传递给函数,它开始搜索但从未给我任何结果,它只是永远搜索我所知道的一切,没有例外,没有调用

public void servicesDiscovered(int arg0, ServiceRecord[] arg1) 

public void serviceSearchCompleted(int arg0, int arg1)

所以我想我的问题是: - 难道我做错了什么?有什么建议么? - 连接到 BT 设备的其他方法是什么? 我必须知道有关设备的信息吗?

以下是我认为与设备手册相关的一些信息:

必须执行以下步骤才能连接到 HxM 设备。 1) 激活要连接到 HxM 的设备/计算机的蓝牙服务 2) 扫描范围内的蓝牙设备 3) 与范围内找到的 HxM 设备配对 4) 发现配对 HxM 的服务 5) 连接HxM设备的串口

上图显示蓝牙 HxM 通常通过蓝牙与移动设备通信 关联。 HxM 一次仅支持一个链接,并使用蓝牙 SPP(串行端口配置文件)进行通信 与具有以下低级协议的其他设备: • 115,200 波特 • 8 个数据位 • 1 个停止位 • 无奇偶性

非常感谢任何建议

编辑:我只想补充一点,我正在使用控制台输入循环测试代码,因此在调用 searchServices 后程序不会立即终止,它应该有时间完成,除非我误解了异步任务

【问题讨论】:

  • 我还想补充一点,当我搜索 BlueSoleil 时,它会在我的设备上找到 1 项服务,我尝试在设备通过 BlueSoleil 配对、连接、取消配对和断开连接时搜索服务。我还在 BlueSoleil 和 windows 8 自己的 BT 堆栈上测试了代码

标签: java bluetooth sensors bluecove


【解决方案1】:

我只是想更新这个并说我发现了问题,看来我必须使用短 UUID 而不是长 UUID。在我认为自己陷入困境之前,我应该尝试这两种选择,但我认为这不会有任何不同。

【讨论】:

    猜你喜欢
    • 2018-01-01
    • 2013-06-21
    • 2016-09-18
    • 2017-04-03
    • 2016-01-07
    • 2021-08-31
    • 2015-06-14
    • 1970-01-01
    • 2011-06-10
    相关资源
    最近更新 更多