android - 在Android中建立蓝牙微微网

标签 android bluetooth

我正致力于在测试台中的多个设备之间建立蓝牙 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/

相关文章:

android - Crashlytics Android SDK - 自定义 UncaughtExceptionHandler

java - Android 在开始 Activity 时崩溃?

python - 在树莓派上用蓝牙测量接近度

macos - 如何通过 IOBluetooth 框架 (macOS) 获取 BLE 设备列表

android - 动态添加textview android的问题

java - 是否可以使用 Activity 名称或类似名称在 Android 上使用 startActivity 在不同的 apk 中启动 Activity ?

安卓应用市场

bluetooth - 如何使用 rfcomm 将多个 Android 智能手机连接到我的 Raspberry Pi 3?

android - 蓝牙SPP(串行)故障(Android)

java - Android BluetoothSocket无法连接