1. 程式人生 > >Android學習——藍芽傳輸

Android學習——藍芽傳輸

藍芽傳輸

通過藍芽傳輸資料與Socket類似。在網路中使用Socket和ServerSocket控制客戶端和服務端的資料讀寫。而藍芽通訊也由客戶端和服務端Socket來完成。藍芽客戶端Socket是BluetoothSocket,藍芽服務端Socket是BluetoothServerSocket。這兩個類都在android.bluetooth包中。

如果打算建議兩個藍芽裝置之間的連線,則必須實現伺服器端與客戶端的機制。當兩個裝置在同一個RFCOMM channel下分別擁有一個連線的BluetoothSocket,這兩個裝置才可以說是建立了連線。

伺服器裝置與客戶端裝置獲取BluetoothSocket的途徑是不同的。伺服器裝置是通過accepted一個incoming connection來獲取的,而客戶端裝置則是通過開啟一個到伺服器的RFCOMMchannel來獲取的。

服務端的實現

通過呼叫BluetoothAdapter的listenUsingRfcommWithServiceRecord(String, UUID) 方法來獲取
BluetoothServerSocket(UUID用於客戶端與伺服器端之間的配對)呼叫BluetoothServerSocket的 accept() 方法監聽連線請求,如果收到請求,則返回一個BluetoothSocket例項。

如果不想在accept其他的連線,則呼叫BluetoothServerSocket的 close() 方法釋放資源(呼叫該方法後,之前獲得的BluetoothSocket例項並沒有close。但由於RFCOMM一個時刻只允許在一條channel中有一個連線,則一般在accept一個連線後,便close掉BluetoothServerSocket)

客戶端的實現

通過搜尋得到伺服器端的BluetoothService,呼叫BluetoothService的listenUsingRfcommWithServiceRecord(String, UUID)方法獲取BluetoothSocket(該UUID應該同於伺服器端的UUID)。

呼叫BluetoothSocket的 connect() 方法(該方法為block方法),如果UUID同伺服器端的UUID匹配,並且連線被伺服器端accept,則 connect() 方法返回。

注意:在呼叫 connect() 方法之前,應當確定當前沒有搜尋裝置,否則連線會變得非常慢並且容易失敗。