同时连接到两个具有相同UUID的蓝牙设备

时间:2018-10-24 22:01:43

标签: android bluetooth uuid hc-05

我尝试创建一个Android应用程序,该应用程序连接到两个Bluetooth HC-05模块(已连接到Arduino)。

我能够同时连接到这两个设备,并且如果我仅向其中一个设备发送数据,则一切正常,如果我同时向两个设备发送数据,则可能会工作一段时间,但随后它会停止发送至一个设备。

在一部手机上,这会导致应用崩溃;在另一部手机上,则什么都没有发生(没有异常或连接中断的通知)。

因此,我检查了Internet,并在大多数情况下说可以同时连接到两个蓝牙设备(例如here)。

我无法弄清楚此错误的原因是什么。但是我有一些想法。也许有人可以确认,或者知道真正的问题或更有效的解决方案:)

由于我使用了两个HC-05蓝牙模块,所以它们具有相同的UUID,我相信这可能是有问题的,因为该UUID不适用于一个设备。但我不确定这是否是问题。也许有人知道如何更改HC-05的UUID?

请注意,我正在随机发送数据到两台计算机。所以我认为这可能会导致问题。该应用程序有时试图一次发送到两个设备,这会造成麻烦。 因此,我正在考虑为此采取某种解决方法。但我不确定如何。也许是一些堆栈,我将数据和它需要发送到的设备放入其中,然后逐个发送它们,并且之间可能会有一些延迟。因此,数据的发送在某种程度上是“同步的”。但是我不知道这是否是一个好的解决方案,我很感谢我能得到的任何建议。

所以现在我像这样连接到设备:

 public void connect(String mac){
    Set<BluetoothDevice> bondedDevices = BluetoothAdapter.getDefaultAdapter().getBondedDevices();
    for (BluetoothDevice devices : bondedDevices)
        if (devices.getAddress().equals(mac)) {
            this.device = devices;
            break;
        }

    if (this.device == null) {
        //some error handling
    } else {
        UUID id= UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");
        try {
            this.socket = this.device.createRfcommSocketToServiceRecord(id);
            this.socket.connect();
            this.outputStream = this.socket.getOutputStream();
            final InputStream  st = this.socket.getInputStream();
            //some more init stuff
        } catch (Exception e) {
            e.printStackTrace();
            this.disconnect();
        }
    }
}

我正在发送这样的数据(没有多余的代码):

byte[] send = new byte[9];
//fill Data
try {
    this.outputStream.write(send);
    this.outputStream.flush();       
} catch (Exception e) {
    //Displaying Toast with Error message                  
    Toast.makeText(DirtyCode.appcont, e.getMessage(), Toast.LENGTH_LONG).show();
    Log.e("SEND EXCEPTION:" + device.getName(), e.getMessage());
    e.printStackTrace();
    return false;
}

所以我也想,我可能需要以某种方式使用BluetoothServerSocket。但是我不确定。

在仅连接一台设备或连接两台设备但仅发送到一台设备的情况下,该连接可以完美地工作(将非常零碎的数据发送到第二台设备通常很长时间才能引起麻烦)。

我尝试解决了很长时间,但是我无法使其正常运行,因此所有帮助都被废止了。

1 个答案:

答案 0 :(得分:0)

您不能同时连接到具有相同BT服务的多个BT设备。听起来像这样,您有两个BT扬声器,并且都连接了它们,然后开始播放音乐,然后两个扬声器都播放。不可能。

但是您可以连接多个BT设备,每个设备都是不同的BT服务:例如:同时使用BT鼠标和BT扬声器。这是可能的。