Android 蓝牙 API 连接到多个设备

Posted

技术标签:

【中文标题】Android 蓝牙 API 连接到多个设备【英文标题】:Android Bluetooth API connect to multiple devices 【发布时间】:2010-12-17 07:58:31 【问题描述】:

我们可以连接多个设备吗?谁能给我分享一下代码!这个问题困扰了我很久!谢谢!

【问题讨论】:

【参考方案1】:

我会说代码不是问题。正确的实现是为每个连接管理一个线程,但是我发现您可以同时连接的设备数量受到手机蓝牙实现的限制。蓝牙规范规定可以连接 7 个设备,但是我发现 android 手机只能处理 1 个蓝牙连接,而其他人可以处理 6 个。如果 Android 开发团队的某个人可以在这里更深入地了解,这将真正有助于蓝牙开发社区。

【讨论】:

我只是浪费了很多时间才发现Nexus 7只能连接1个BT设备,但Nexus 10可以同时连接多个设备。 @SalmanKhakwani,你是怎么知道有多少 BT 设备可以连接到你的 Nexus 7 的? 您可以查看设备中正在使用的蓝牙硬件。您还可以检查它支持的同时连接数。【参考方案2】:

是的,您可以设置多个蓝牙连接(至少 RFCOMM 连接)。只需使用替代线程进行连接,它就可以正常工作(我猜) 另见:http://developer.android.com/resources/samples/BluetoothChat/index.html

编辑,注释布局不可读: 在connectThread函数中,更改:

tmp = device.createRfcommSocketToServiceRecord(MY_UUID);

到:

Method m = device.getClass().getMethod("createRfcommSocket", new Class[] int.class);
tmp = (BluetoothSocket) m.invoke(device, 1);

【讨论】:

此示例无法连接多个设备,当我尝试连接第三个设备时,会打印 io Exception:service discoery 嗯,当您尝试更改时: tmp = device.createRfcommSocketToServiceRecord(MY_UUID); to:方法 m = device.getClass().getMethod("createRfcommSocket", new Class[] int.class); tmp = (BluetoothSocket) m.invoke(device, 1); (使用正确的尝试/捕获)你仍然得到那个错误吗? (请参阅答案以获取可读代码..) java.io.IOException: 软件导致连接中止【参考方案3】:

是的,可以在蓝牙服务器套接字中连接多个设备,可以试试这个lib

【讨论】:

【参考方案4】:

就像 Barry 所说,您可以连接到多个设备。只需为每个连接创建一个新线程。您将需要一个您正在跟踪的“ConnectThread”和“ConnectedThread”的列表。因此,您只需使其适应多个线程(当然,还需要实现选择多个设备的能力)。 我已经做到了,而且并不难。

如果您想连接到一个设备,然后再连接到另一个(使用原始菜单一个接一个),那么您可能还有更多工作要做。

【讨论】:

【参考方案5】:

要进行多重连接,您必须为要连接的每个设备创建单独的线程。 每个线程都有单独的方法来读取和写入远程设备的数据。

查看此链接

Android Bluetooth multiple connection issue?

【讨论】:

以上是关于Android 蓝牙 API 连接到多个设备的主要内容,如果未能解决你的问题,请参考以下文章

如何使用Android蓝牙开发

多个蓝牙连接

Android上的BLE(蓝牙低功耗蓝牙),创建并重新连接到并不总是存在的设备

蓝牙连接到 iOS 和 android

Android 蓝牙实例

在范围内时自动连接到配对的蓝牙设备