Android 平台支援藍牙網路堆疊,可讓裝置與其他藍牙裝置無線交換資料。應用程式架構可透過藍牙 API 存取藍牙功能。這些 API 可讓應用程式連線至其他藍牙裝置,啟用點對點和多點無線功能。
應用程式可使用 Bluetooth API 執行下列操作:
- 掃描其他藍牙裝置。
- 查詢本機藍牙轉接器,找出已配對的藍牙裝置。
- 建立 RFCOMM 管道。
- 透過服務探索連線至其他裝置。
- 與其他裝置互傳資料。
- 管理多個連結。
本文著重於傳統藍牙。傳統藍牙適合用於更耗電的操作,包括串流和裝置間通訊。如果藍牙裝置的耗電量較低,建議使用藍牙低功耗連線。
本文件說明不同的藍牙設定檔,並說明如何使用藍牙 API 完成使用藍牙通訊所需的四項主要工作:
- 設定藍牙。
- 尋找已配對或位於當地的可用裝置。
- 連結裝置。
- 在裝置間轉移資料。
基本概念
如要讓支援藍牙的裝置在彼此之間傳輸資料,必須先使用配對程序建立通訊管道。其中一部裝置 (可供偵測的裝置) 會開放接收連入連線要求。另一部裝置會使用服務探索程序,尋找可供偵測的裝置。可供偵測的裝置接受配對要求後,兩部裝置會完成繫結程序,並交換安全金鑰。裝置會快取這些金鑰,以供日後使用。
配對和繫結程序完成後,兩部裝置會交換資訊。工作階段完成後,發起配對要求的裝置會釋出與可偵測裝置連結的通道。不過,這兩個裝置仍會保持繫結,因此只要在彼此的範圍內,且未移除繫結,就能在日後的作業階段中自動重新連線。
如要使用藍牙 API,您必須在資訊清單檔案中宣告多項權限。接著,存取 BluetoothAdapter 並判斷裝置是否支援藍牙。如果可以使用藍牙,請按照下列三個步驟操作:
- 尋找鄰近藍牙裝置,包括已配對的裝置或新裝置。
- 連線到藍牙裝置。
- 使用連結裝置轉移資料。
某些裝置會使用特定的藍牙設定檔,宣告其提供的資料。
重要類別和介面
所有藍牙 API 都位於 android.bluetooth 套件中。以下是建立藍牙連線所需的類別和介面:
BluetoothAdapter- 代表本機藍牙轉接器 (藍牙無線電)。
BluetoothAdapter是所有藍牙互動的進入點。您可以使用這個類別探索其他藍牙裝置、查詢已繫結 (配對) 裝置的清單、使用已知 MAC 位址例項化BluetoothDevice,以及建立BluetoothServerSocket來監聽其他裝置的通訊。 BluetoothDevice- 代表遠端藍牙裝置。使用這個類別,透過
BluetoothSocket要求與遠端裝置連線,或查詢裝置的相關資訊,例如名稱、位址、類別和繫結狀態。 BluetoothSocket- 代表藍牙通訊端介面 (類似 TCP
Socket)。這是連線點,可讓應用程式使用InputStream和OutputStream與其他藍牙裝置交換資料。 BluetoothServerSocket- 代表開放式伺服器通訊端,用於監聽傳入要求 (類似於 TCP
ServerSocket)。如要連結兩部裝置,其中一部裝置必須使用這個類別開啟伺服器通訊端。當遠端藍牙裝置向這部裝置提出連線要求時,裝置會接受連線,然後傳回已連線的BluetoothSocket。 BluetoothClass- 說明藍牙裝置的一般特性和功能。這是一組唯讀屬性,用於定義裝置的類別和服務。雖然這項資訊可提供裝置類型的實用提示,但這個類別的屬性不一定會描述裝置支援的所有藍牙設定檔和服務。
BluetoothProfile- 代表藍牙設定檔的介面。藍牙設定檔是一種無線介面規格,用於裝置間的藍牙通訊。例如免持設定檔。如要進一步瞭解設定檔,請參閱「藍牙設定檔」。
BluetoothHeadset- 支援與手機搭配使用的藍牙頭戴式耳機。包括藍牙頭戴式耳機設定檔和免持 (v1.5) 設定檔。
BluetoothA2dp- 定義如何使用進階音訊發布設定檔 (A2DP),透過藍牙連線將高音質音訊從一部裝置串流到另一部裝置。
BluetoothHealth- 代表控制藍牙服務的健康裝置設定檔 Proxy。
BluetoothHealthCallback- :用於實作
BluetoothHealth回呼的抽象類別。您必須擴充這個類別並實作回呼方法,才能接收應用程式註冊狀態和藍牙通道狀態變更的更新。 BluetoothHealthAppConfiguration- 代表藍牙健康第三方應用程式註冊的應用程式設定,用於與遠端藍牙健康裝置通訊。
BluetoothProfile.ServiceListener- 當
BluetoothProfile處理序間通訊 (IPC) 用戶端連線至或中斷連線至執行特定設定檔的內部服務時,通知該用戶端的介面。