藍牙總覽

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) 用戶端連線至或中斷連線至執行特定設定檔的內部服務時,通知該用戶端的介面。