Android 提供了預設的藍牙堆棧,支援經典藍牙和低功耗藍牙。使用藍牙,Android 裝置可以建立個人區域網絡,以便與附近的藍牙裝置發送和接收資料。
在 Android 4.3 及更高版本中,Android 藍牙堆疊提供了實現藍牙低功耗 (BLE) 的功能。若要充分利用 BLE API,請遵循Android 藍牙 HCI 要求。配備合格晶片組的 Android 裝置可實現經典藍牙或同時實現經典藍牙和 BLE。 BLE 不向後相容較舊的藍牙晶片組。
在 Android 8.0 中,本機藍牙堆疊完全符合藍牙 5 標準。要使用可用的藍牙 5 功能,裝置需要具有符合藍牙 5 標準的晶片組。
安卓架構
藍牙應用程式透過 Binder 與藍牙進程進行通訊。藍牙進程使用 JNI 與藍牙堆疊進行通信,並為開發人員提供對各種藍牙設定檔的存取。下圖顯示了藍牙堆疊的一般結構:
- 應用框架
- 應用程式框架層級是應用程式程式碼,它使用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 藍牙堆疊是一個完全合格的藍牙堆疊。資格清單位於藍牙 SIG 網站上,編號為QDID 169365 。
核心藍牙堆疊位於packages/modules/Bluetooth
。開發發生在 AOSP 中,歡迎貢獻。
Android 7.x 及更早的架構
藍牙系統服務透過 JNI 與藍牙堆疊通信,並透過 Binder IPC 與應用程式通訊。該系統服務為開發人員提供了對各種藍牙設定檔的存取。下圖顯示了藍牙堆疊的一般結構:
- 應用框架
- 應用程式框架層級是應用程式程式碼,它利用android.bluetooth API 與藍牙硬體互動。在內部,這段程式碼透過Binder IPC機制呼叫藍牙進程。
- 藍牙系統服務
- 藍牙系統服務位於
packages/apps/Bluetooth
中,被打包為Android應用程序,並在Android框架層實現藍牙服務和設定檔。該應用程式透過 JNI 呼叫 HAL 層。 - JNI
- 與android.bluetooth關聯的 JNI 代碼位於
packages/apps/Bluetooth/jni
。當某些藍牙操作發生時(例如發現裝置時),JNI 程式碼會呼叫 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 文件參考。