
Android 提供預設的藍牙堆疊,同時支援傳統藍牙和藍牙低功耗。Android 裝置可透過藍牙建立個人區域網路,與附近的藍牙裝置傳送及接收資料。
在 Android 4.3 以上版本中,Android 藍牙堆疊可實作藍牙低功耗 (BLE)。如要完整使用 BLE API,請遵循 Android Bluetooth HCI 規定。搭載合格晶片的 Android 裝置可以實作傳統藍牙,也可以同時實作傳統藍牙和 BLE。BLE 與舊版藍牙晶片組不回溯相容。
在 Android 8.0 中,藍牙堆疊完全符合藍牙 5 的資格。如要使用藍牙 5 的功能,裝置必須具備藍牙 5 認證的晶片組。
Android 架構
藍牙應用程式會透過 Binder 與藍牙程序通訊。藍牙程序會使用 JNI 與藍牙堆疊通訊,並讓開發人員存取各種藍牙設定檔。下圖顯示藍牙堆疊的一般結構:
圖 1. Android 藍牙架構。
- 應用程式架構
-
在應用程式架構層級,應用程式程式碼會使用
android.bluetooth
API 與藍牙硬體互動。在內部,這段程式碼會透過 Binder IPC 機制呼叫藍牙程序。 - 藍牙應用程式
-
藍牙應用程式位於
packages/modules/Bluetooth/android/app
, 封裝為 Android 應用程式,並在 Android 架構層實作藍牙設定檔。這個應用程式會透過 JNI 呼叫藍牙堆疊。 - JNI
-
與 android.bluetooth 相關聯的 JNI 程式碼位於
packages/modules/Bluetooth/android/app/jni
。發生特定藍牙作業時 (例如偵測到裝置),JNI 程式碼會呼叫藍牙堆疊。 - 藍牙堆疊
-
AOSP 提供預設藍牙堆疊,位於
packages/modules/Bluetooth/system
。堆疊會實作一般藍牙 HAL,並透過擴充功能和設定變更進行自訂。 - 廠商導入
- 供應商裝置會使用硬體介面設計語言 (HIDL) 與藍牙堆疊互動。
HIDL
HIDL 定義藍牙堆疊與供應商實作之間的介面。如要產生藍牙 HIDL 檔案,請將藍牙介面檔案傳遞至 HIDL 產生工具。介面檔案位於
hardware/interfaces/bluetooth
。
藍牙堆疊開發
Android 藍牙堆疊是完全合格的藍牙堆疊。資格清單位於 Bluetooth SIG 網站的 QDID 169365 下方。
核心藍牙堆疊位於
packages/modules/Bluetooth
中。開發作業會在 AOSP 中進行,歡迎貢獻內容。
Android 7.x 以下架構
藍牙系統服務會透過 JNI 與藍牙堆疊通訊,並透過 Binder IPC 與應用程式通訊。系統服務可讓開發人員存取各種藍牙設定檔。下圖顯示藍牙堆疊的一般結構:
圖 2. Android 7.x 以下版本的藍牙架構。
- 應用程式架構
-
在應用程式架構層級,應用程式程式碼會使用
android.bluetooth
API 與藍牙硬體互動。在內部,這段程式碼會透過 Binder IPC 機制呼叫藍牙程序。 - 藍牙系統服務
-
藍牙系統服務位於
packages/apps/Bluetooth
,封裝為 Android 應用程式,並在 Android 架構層實作藍牙服務和設定檔。這個應用程式會透過 JNI 呼叫 HAL 層。 - JNI
-
與
android.bluetooth
相關聯的 JNI 程式碼位於
packages/apps/Bluetooth/jni
。JNI 程式碼會呼叫 HAL 層,並在發生特定藍牙作業時 (例如發現裝置時),從 HAL 接收回呼。 - HAL
-
硬體抽象層定義了標準介面,
android.bluetooth
API 和藍牙程序會呼叫該介面,您必須實作該介面,藍牙硬體才能正常運作。藍牙 HAL 的標頭檔案為
hardware/libhardware/include/hardware/bluetooth.h
。此外,請檢查所有hardware/libhardware/include/hardware/bt_*.h
檔案。 - 藍牙堆疊
-
系統會提供預設的藍牙堆疊,位於
system/bt
。 堆疊會實作一般藍牙 HAL,並透過擴充功能和設定變更進行自訂。 - 廠商擴充功能
- 如要新增自訂擴充功能和用於追蹤的 HCI 層,可以建立 libbt-vendor 模組,並指定這些元件。
實作 HAL
藍牙 HAL 位於 /hardware/libhardware/include/hardware/bluetooth.h
。bluetooth.h
檔案包含藍牙堆疊的基本介面,您必須實作其函式。
設定檔專屬檔案位於同一個目錄中。詳情請參閱 HAL 檔案參考資料。