基本问题: 如果我在Android 2.2+中打开多个蓝牙连接,UUID是否确保使用RFCOMM频道的唯一性?
背景: 我想创建一个Android应用程序,它将驻留在多个(3+)个不同的Android手机上(最低Android版本2.2)。应用程序的每个实例将通过蓝牙相互通信。因此,每个应用程序将同时打开多个蓝牙连接,以便与所有参与的应用程序通信。
我知道这是(至少)可能的,因为我扩展了BluetoothChat示例应用程序以支持所有以聊天室类型方式聊天的N个客户端。所以我可以同时保持打开多个蓝牙连接。
我关心的是android文档中的以下语句: “与TCP / IP不同,RFCOMM一次只允许每个通道连接一个客户端,因此在大多数情况下,在接受连接的套接字后立即在BluetoothServerSocket上调用close()是有意义的。” (http://developer.android.com/guide/topics/wireless/bluetooth.html)
现在,我实施聊天室式蓝牙应用程序的事实告诉我,我打开同时连接的方法导致不同RFCOMM通道上的连接(否则我会遇到连接失败或串扰)。但是,我不确定我的方法的哪一部分会产生不同的RFCOMM频道,而这正是这个问题的关键所在。
我打开多个蓝牙连接的方法有两个部分: 1.通过反复调用accept()使用相同的BluetoothServerSocket对象来接受多个连接,我创建了一个线程,为我想接受的每个连接调用listenUsingRfcommWithServiceRecord(String,UUID)。 2.我没有为每个连接使用相同的UUID,而是手动管理一组7个UUID,使得每个accept()都位于使用不同UUID创建的BluetoothServerSocket上。
现在,我从文档中了解到listenUsingRfcommWithServiceRecord(String,UUID)将一个条目添加到SDP数据库以供监听。显然,我为每个接受的连接创建不同的SDP数据库条目这一事实至少是为什么每个连接使用不同的RFCOMM连接的部分原因。但是UUID在这里有什么影响吗?如果我在7个不同的线程上使用相同的UUID调用该方法7次,它还能工作吗?或者不同的UUID会导致使用不同的RFCOMM通道吗?
这里的问题显然是因为我必须为我的应用程序管理7个不同的UUIDS,确保可用连接UUIDS的正确同步,因为连接打开和关闭可能是一个巨大的麻烦。如果在调用listenUsingRfcommWithServiceRecord(String,UUID)时,任何人都可以确认或否认UUID对RFCOMM频道选择有影响,那将非常有用。
(未讨论 - UUID对连接端的影响,createRfcommSocketToServiceRecord(UUID);我的假设是,如果它适用于传入它可能适用于传出。)
感谢任何可以提供帮助的人。
答案 0 :(得分:3)
从我收集的信息来看,使用的频道由它的UUID决定。因此多个连接到同一个通道将失败。