我能够同时连接到这两个设备,并且如果我仅向其中一个设备发送数据,则一切正常,如果我同时向两个设备发送数据,则可能会工作一段时间,但随后它会停止发送至一个设备。
在一部手机上,这会导致应用崩溃;在另一部手机上,则什么都没有发生(没有异常或连接中断的通知)。
因此,我检查了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。但是我不确定。
在仅连接一台设备或连接两台设备但仅发送到一台设备的情况下,该连接可以完美地工作(将非常零碎的数据发送到第二台设备通常很长时间才能引起麻烦)。
我尝试解决了很长时间,但是我无法使其正常运行,因此所有帮助都被废止了。
答案 0 :(得分:0)
您不能同时连接到具有相同BT服务的多个BT设备。听起来像这样,您有两个BT扬声器,并且都连接了它们,然后开始播放音乐,然后两个扬声器都播放。不可能。
但是您可以连接多个BT设备,每个设备都是不同的BT服务:例如:同时使用BT鼠标和BT扬声器。这是可能的。