Android 在中央角色中提供內建的藍牙低功耗 (BLE) 平台支援,並提供應用程式可用於探索裝置、查詢服務和傳輸資訊的 API。
常見用途包括:
- 在鄰近裝置之間傳輸少量資料。
- 與接近度感應器互動,根據使用者的目前位置提供客製化體驗。
與傳統藍牙不同,BLE 的設計可大幅降低耗電量。這可讓應用程式與 BLE 裝置通訊,這些裝置的電力需求較嚴格,例如接近感應器、心率監測器和健身裝置。
注意:當使用者使用 BLE 將裝置與其他裝置配對時,兩部裝置之間傳輸的資料可供使用者裝置上的所有應用程式存取。
因此,如果您的應用程式擷取私密資料,應實作應用程式層安全性,以保護該資料的隱私權。
基本概念
支援 BLE 的裝置必須先建立通訊管道,才能在彼此之間傳輸資料。如要使用 Bluetooth LE API,您必須在資訊清單檔案中宣告多個權限。應用程式取得藍牙使用權限後,應用程式就必須存取 BluetoothAdapter
,並判斷裝置是否支援藍牙
如果支援藍牙,裝置就會掃描附近的 BLE 裝置。找到裝置後,系統會連線至 BLE 裝置上的 GATT 伺服器,藉此偵測 BLE 裝置的功能。連線完成後,您可以根據可用的服務和特徵,透過已連結的裝置傳輸資料。
重要詞彙與概念
以下是 BLE 重要術語和概念的摘要:
- 一般屬性設定檔 (GATT)
- GATT 設定檔是一種一般規格,可透過 BLE 連結傳送及接收稱為「屬性」的短資料片段。目前所有 BLE 應用程式設定檔都以 GATT 為基礎。詳情請參閱 GitHub 上的 Android BluetoothLeGatt 範例。
- 設定檔
- Bluetooth SIG 定義了許多 BLE 裝置的設定檔。設定檔是裝置在特定應用程式中運作方式的規格。請注意,裝置可以實作多個設定檔。舉例來說,裝置可能包含心率監測器和電池電量偵測器。
- 屬性通訊協定 (ATT)
- GATT 是建立在屬性通訊協定 (ATT) 之上,這也稱為 GATT/ATT。ATT 經過最佳化調整,適合在 BLE 裝置上執行。為此,它會盡可能使用最少的位元組。每個屬性都會透過通用專屬識別碼 (UUID) 進行專屬識別,這是用於識別資訊的字串 ID 的標準化 128 位元格式。ATT 傳輸的屬性會調整為「characteristics」和「services」格式。
- 特性
- 特徵包含單一值和 0 到 n 個描述項,用於說明特徵的值。特徵可視為一種類型,類似於類別。
- 描述元
- 描述元是定義的屬性,用於描述特徵值。舉例來說,描述元可能會指定人類可讀的說明、特性值的接受範圍,或特性值專屬的測量單位。
- 服務
- 服務是一組特性。舉例來說,您可以建立名為「心率監測器」的服務,其中包含「心率測量」等特徵。您可以在 bluetooth.org 上找到現有的 GATT 設定檔和服務清單。
角色和責任
當裝置與 BLE 裝置互動時,角色和職責會以兩種方式劃分:
中央與周邊。這項作業適用於 BLE 連線本身,也就是中央角色掃描裝置、尋找廣告,以及周邊角色廣告裝置。兩部僅支援周邊角色的裝置無法互相通訊,兩部僅支援中樞角色的裝置也無法互相通訊。
GATT 伺服器與 GATT 用戶端的比較這會決定兩部裝置在建立連線後彼此之間的通訊方式。用戶端角色中的裝置會傳送資料要求,而伺服器角色中的裝置會滿足這些要求。
如要瞭解中心-外圍裝置和伺服器-用戶端角色劃分的差異,請考慮以下範例:您有一部 Android 手機和支援 BLE 的活動追蹤器,可將感應器資料回報給手機。
手機是中心裝置,會主動掃描 BLE 裝置。活動追蹤器 (周邊裝置) 會宣傳並等待收到連線要求。
手機和活動追蹤器建立連線後,就會開始將 GATT 中繼資料互相傳輸。在這種情況下,手機上執行的應用程式會傳送資料要求,因此會充當 GATT 用戶端。活動追蹤器會執行這些要求,因此會充當 GATT 伺服器。
應用程式的其他設計可能會讓手機扮演 GATT 伺服器的角色。詳情請參閱 BluetoothGattServer
。