2011-08-25 46 views
3

基本問題: 如果我在Android 2.2+版本中打開多個藍牙連接,UUID在確保使用的RFCOMM通道的唯一性方面是否重要?無論UUID是否連接了BluetoothSocket 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通道,這就是這個問題的含義。

有2個部分,以我的方式來打開多個藍牙連接: 1.使用相同的BluetoothServerSocket對象接受通過調用accept()通過多個連接,並且,我創建調用listenUsingRfcommWithServiceRecord(字符串線程相反的, UUID)用於我想要接受的每個連接。 2.我沒有爲每個連接使用相同的UUID,而是我手動管理的一組7個UUID,每個accept()都位於使用不同UUID創建的BluetoothServerSocket上。

現在,我從文檔中瞭解到,listenUsingRfcommWithServiceRecord(String,UUID)向SDP數據庫添加一個條目以供偵聽。顯然,爲每個接受的連接創建不同的SDP數據庫條目的事實至少是爲什麼每個連接使用不同的RFCOMM連接的部分原因。但是UUID在這裏有什麼影響嗎?如果我在7個不同的線程上使用相同的UUID調用7次方法,它仍然可以工作嗎?或者不同的UUID會導致不同的RFCOMM信道被使用?

這裏顯然的問題是事實,如果我要管理7點不同的UUID我的應用程序,以確保爲連接打開和關閉可以是一個巨大的麻煩可用連接的UUID的適當的同步。如果任何人都可以證實或否認的UUID必須在RFCOMM信道選擇的影響時,listenUsingRfcommWithServiceRecord(字符串,UUID)被調用,這將是非常有用的。

(不討論-的UUID對連接側面碰撞,createRfcommSocketToServiceRecord(UUID);我的假設是,如果它擁有傳入的,它可能適用於傳出。)

由於任何人誰可以提供幫助。

回答

3

從我所收集,使用信道是由它確定的UUID。所以多個連接到同一個通道將會失敗。