藍牙低功耗

Android 內建藍牙低功耗 (BLE) 的平台支援,並提供 API,讓應用程式用於探索裝置、查詢服務及傳輸資訊。

常見用途包括:

  • 附近裝置間傳輸少量資料。
  • 與鄰近感應器互動,根據使用者目前的位置提供自訂體驗。

相較於傳統藍牙,BLE 是設計用來大幅降低耗電量。這樣做可讓應用程式與有更嚴格的電力需求的 BLE 裝置進行通訊,例如鄰近感應器、心率監測器和健身裝置。

注意:當使用者使用 BLE 將裝置與另一部裝置配對時,使用者裝置上的所有應用程式皆可存取兩部裝置之間通訊的資料。

因此,如果應用程式會擷取機密資料,您應導入應用程式層安全防護機制,以保護該資料的隱私權。

基本資訊

如要讓支援 BLE 的裝置互相傳輸資料,必須先構成通訊管道。您必須在資訊清單檔案中宣告數個權限,才能使用 Bluetooth LE API。應用程式具備使用藍牙的權限後,應用程式就需要存取 BluetoothAdapter,並判斷裝置是否支援藍牙。如果有藍牙功能,裝置就會掃描附近的 BLE 裝置。找到裝置後,系統會連線至 BLE 裝置上的 GATT 伺服器,找出 BLE 裝置的功能。建立連線後,系統就能依據可用的服務和特性,將資料與連結的裝置轉移

重要詞彙與概念

以下是 BLE 重要詞彙與概念的摘要:

  • 一般屬性設定檔 (GATT)
    GATT 設定檔是一種一般規格,用於透過 BLE 連結收發一小段稱為「屬性」的資料。目前所有的 BLE 應用程式設定檔均以 GATT 為基礎。詳情請參閱 GitHub 上的 Android BluetoothLeGatt 範例
  • 設定檔
    藍牙 SIG 定義了 BLE 裝置的多個設定檔。設定檔是裝置在特定應用程式中運作的規格。請注意,單一裝置可以實作多個設定檔。舉例來說,裝置可能含有心率監測器和電池電量偵測工具。
  • 屬性通訊協定 (ATT)
    GATT 是以屬性通訊協定 (ATT) 為基礎。也稱為 GATT/ATT。ATT 已經過最佳化調整,可在 BLE 裝置上執行。為此,系統會盡可能使用少量位元組每個屬性都有專屬識別識別碼 (UUID),這是一個字串 ID 的標準化 128 位元格式,可用於識別特定資訊。ATT 傳輸的屬性會格式化為「特性」和「服務」
  • 特色
    特性包含單一值和 0 至 n 個描述元用於描述特性值的描述元。特徵可視為一個類型,類似於類別。
  • 描述元
    描述元是描述特徵值的屬性。舉例來說,描述元可能會指定人類可讀的說明、特徵值可接受的範圍,或特性值專屬的測量單位。
  • 服務
    服務是指具備一組特性。舉例來說,您可以建立一個名為「心率監測器」的服務,其中包含「心率測量」這類特性。您可以在 bluetooth.org 查看以 GATT 為基礎的設定檔和服務清單。

角色與責任

裝置與 BLE 裝置互動時,適用的角色和責任如下:

  • 中央裝置和周邊裝置。這適用於 BLE 連線本身。中央角色的裝置會掃描並尋找廣告,週邊裝置角色的裝置則會放送廣告。

  • GATT 伺服器與 GATT 用戶端。這項設定可決定兩部裝置在建立連線後如何互相通訊。為了瞭解差異,假設您有 Android 手機和一款 BLE 裝置的活動智慧手環。手機支援中心角色;活動追蹤器支援週邊裝置角色。如要建立 BLE 連線,您需要各自建立其中一個。只有兩種支援週邊裝置無法相互通訊的情況,也可能有兩個僅支援中央位置的事情。

手機和活動追蹤器建立連線後,就會開始將 GATT 中繼資料彼此傳輸。視傳輸的資料類型而定,其中可能一種資料可做為伺服器使用。舉例來說,如果活動追蹤器想要將感應器資料回報給手機,活動追蹤器就能當做伺服器使用。如果活動智慧手環想要接收來自手機的更新,則手機應該以伺服器的形式運作。

在本主題使用的範例中,應用程式 (在 Android 裝置上執行) 是 GATT 用戶端。應用程式會從 GATT 伺服器取得資料,GATT 伺服器是支援心率設定檔的 BLE 心率監控器。或者,您也可以設計應用程式來扮演 GATT 伺服器角色。詳情請參閱 BluetoothGattServer 相關說明。