基本问题:
如果我在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)
现在,我对聊天室风格的BluetoothChat应用程序的实现告诉我,打开同时连接的方法会导致在不同RFCOMM通道上的连接(否则,我会得到连接失败或串扰).但是,我不确定我的方法的哪一部分会导致不同的RFCOMM渠道,而这就是这个问题.
打开多个蓝牙连接的方法有两个部分:
1.我不再使用同一个BluetoothServerSocket对象来通过反复调用accept()来接受多个连接,而是创建了一个线程,该线程为我要接受的每个连接调用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);我的假设是,如果保留传入消息,则可能保留传出消息.)
感谢任何能提供帮助的人.
解决方法:
根据我的收集,要使用的渠道取决于其UUID.因此,多个连接到同一通道将失败.