在Android中建立蓝牙微微网

Raj*_*han 4 android bluetooth

我正在研究在测试平台中的多个设备之间建立蓝牙Piconet.所有设备都知道该网络的拓扑结构.

测试平台中的设备是Ubuntu台式电脑和Android(Eclair)设备.现在,我正在研究一种以确定的方式在这些设备之间建立主从关系的方法.具体来说,我正在寻找一种方法来建立一个Android设备作为主设备,并与其他7个设备打开多个连接.

我已经看过使用bluez堆栈和NDK的本机实现,但是我的设备上的bluez堆栈实现(Samsung GT 15503)不符合我猜的标准,甚至像hcitool,hciconfig这样的普通应用程序都不起作用.

因此,我尝试使用官方SDK,甚至成功地用我的笔记本电脑建立了一个RFCOMM插座(使用蓝牙聊天示例应用程序作为参考).但我一直在尝试使用相同的BluetoothServerSocket连接两个或更多设备.除非我关闭原始套接字,否则我似乎无法打开新连接.

非常感谢在这方面的任何建议.

Raj*_*han 8

我终于弄清楚我做错了什么.显然,无论何时从BluetoothServerSocket调用accept方法并返回套接字,都必须在再次调用accept之前关闭此套接字.

我解决了这个问题,通过创建7个不同的 UUID并使用BluetoothServerSocket监听并接受每个 UUID 的连接来建立我想要的微微网.一旦我获得了特定UUID的连接,我关闭相应的服务器套接字并为下一个UUID重新打开另一个.

以下片段说明了我从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
}
Run Code Online (Sandbox Code Playgroud)

这里,mUuid是一个存储7种不同uuids的数组.尝试连接到服务器的客户端也将拥有这些uuids,并将按顺序逐个尝试,因为他们不知道已连接到服务器的客户端数量.