我正致力于在测试台中的多个设备之间建立蓝牙 Piconet。该网络的拓扑结构为所有设备所知。
测试台中的设备是 Ubuntu 台式电脑和 Android (Eclair) 设备。现在,我正在寻找一种确定性方式在这些设备之间建立主从关系的方法。具体来说,我正在寻找一种方法来建立一个 android 设备作为主设备并打开与其他 7 个设备的多个连接。
我已经查看了使用 bluez 堆栈和 NDK 的 native 实现,但是我的设备(Samsung GT 15503)上的 bluez 堆栈实现不符合我猜想的标准,甚至像 hcitool、hciconfig 这样的普通应用程序也不起作用.
因此,我尝试使用官方SDK,甚至成功地在我的笔记本电脑上建立了RFCOMM套接字(使用蓝牙聊天示例应用程序作为引用)。但是我被困在尝试使用相同的 BluetoothServerSocket 连接两个或多个设备的地步。除非我关闭原来的套接字,否则我似乎无法打开新连接。
非常感谢在这方面的任何建议。
最佳答案
我终于明白我做错了什么了。显然,无论何时从 BluetoothServerSocket 调用 accept 方法并取回套接字,都必须在再次调用 accept 之前关闭该套接字。
我解决了这个问题,通过创建 7 个不同 UUID 并使用 BluetoothServerSocket 监听并接受这些 UUID 中每个 的连接来建立我想要的微微网。一旦我获得特定 UUID 的连接,我关闭相应的服务器套接字并为下一个 UUID 重新打开另一个套接字。
以下 fragment 说明了我从 BTClickLinkCompete 得到的想法.
for (int i = 0; i < 7; i++) {
BluetoothServerSocket myServerSocket = mBtAdapter
.listenUsingRfcommWithServiceRecord(srcApp, mUuid.get(i));
BluetoothSocket myBSock = myServerSocket.accept();
myServerSocket.close(); // Close the socket now that the connection
//has been made
//Do stuff with the socket here, like callback to main thread
}
这里的mUuid是一个数组,存放了7个不同的uuid。尝试连接到服务器的客户端也将拥有这些 uuid,并将按顺序一个接一个地尝试它们,因为它们不知道已经连接到服务器的客户端的数量。
关于android - 在Android中建立蓝牙微微网,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5005253/