前言
本章內容是 android.bluetooth.BluetoothSocket,為Android藍芽部分的章節翻譯。藍芽通訊通訊端,代表了與遠端裝置的連接點,使用socket本地程式可以通過inputstream和outputstream與遠端程式進行通訊。版本為 Android 2.3 r1,翻譯來自中山大學的"Android Club SYSU",歡迎訪問他們的WIKI:http://www.android-wiki.net,再次感謝"Android Club SYSU"!期待你一起參與Android API 的中文翻譯,聯絡我 over140@gmail.com。
聲明
歡迎轉載,但請保留文章原始出處:)
Android Club SYSU:http://www.android-wiki.net
部落格園:http://www.cnblogs.com/
Android中文翻譯組:http://code.taobao.org/project/view/404/
本文
一、結構
public final class BluetoothSocket extends Object implements Parcelable
java.lang.Object
android.bluetooth.BluetoothSocket
二、概述
已串連或串連到藍芽通訊端(socket)。
藍芽連接埠監聽介面和TCP連接埠類似:Socket和ServerSocket類。在伺服器端,使用BluetoothServerSocket類來建立一個 監聽服務連接埠。當一個串連被BluetoothServerSocket所接受,它會返回一個新的BluetoothSocket來管理該串連。在客戶 端,使用一個單獨的BluetoothSocket類去初始化一個外接串連和管理該串連。
最通常使用的藍芽連接埠是RFCOMM,它是被Android API支援的類型。RFCOMM是一個連線導向,通過藍芽模組進行的資料流傳輸方式,它也被稱為序列埠規範(Serial Port Profile,SPP)。
為了建立一個BluetoothSocket去串連到一個已知裝置,使用方法 BluetoothDevice.createRfcommSocketToServiceRecord()。然後調用connect()方法去嘗試一個 面向遠程裝置的串連。這個調用將被阻塞指導一個串連已經建立或者該連結失效。
為了建立一個BluetoothSocket作為服務端(或者“主機”),查看BluetoothServerSocket文檔。
每當該連接埠串連成功,無論它初始化為用戶端,或者被接受作為伺服器端,通過getInputStream()和getOutputStream()來開啟IO流,從而獲得各自的InputStream和OutputStream對象
BluetoothSocket類安全執行緒。特別的,close()方法總會馬上放棄外界操作並關閉伺服器連接埠。
注意:需要BLUETOOTH
許可權。
參見
BluetoothServerSocket
InputStream
OutputStream
三、公用方法
public void close ()
馬上關閉該連接埠並且釋放所有相關的資源。
在其它線程的該連接埠中引起阻塞,從而使系統馬上拋出一個IO異常。
異常
IOException
public void connect ()
嘗試串連到遠程裝置。
該方法將阻塞,指導一個串連建立或者失效。如果該方法沒有返回異常值,則該連接埠現在已經建立。
當裝置尋找進行中的時候,建立對遠程藍牙裝置的新串連不可被嘗試。在藍芽適配器上,裝置尋找是一個重量級過程,並且肯定會降低一個裝置的串連。使用 cancelDiscovery()
方法去取消一個外界的查詢。查詢並不由活動所管理,而作為一個系統服務來運行,所以即使它不能直接請求一個查詢,應用 程式也總會調用cancelDiscovery()
方法。
close()
方法可以用來放棄從另一線程而來的調用。
異常
IOException 一個錯誤,例如串連失敗。
public InputStream getInputStream ()
通過串連的連接埠獲得輸入資料流
即使該連接埠未串連,該輸入資料流也會返回。不過在該資料流上的操作將拋出異常,直到相關的串連已經建立。
傳回值
輸入資料流
異常
IOException
public OutputStream getOutputStream ()
通過串連的連接埠獲得輸出資料流
即使該連接埠未串連,該輸出資料流也會返回。不過在該資料流上的操作將拋出異常,直到相關的串連已經建立。
傳回值
輸出資料流
異常
IOException
public BluetoothDevice getRemoteDevice ()
獲得該連接埠正在串連或者已經串連的遠程裝置。
傳回值
遠程裝置
四、補充
文章精選
第四十一講:Android藍芽編程入門
Android藍芽API之BluetoothSocket類
Android藍芽API之BluetoothSocket類(2)