Google致力於提高黑人社區的種族平等。 怎麼看。
本頁面由 Cloud Translation API 翻譯而成。
Switch to English

藍牙

Android藍牙HAL圖標

Android提供了同時支持經典藍牙和低功耗藍牙的默認藍牙堆棧。使用藍牙,Android設備可以創建個人局域網來與附近的藍牙設備發送和接收數據。

在Android 4.3及更高版本中,Android藍牙堆棧提供了實現低功耗藍牙(BLE)的功能。要充分利用BLE API,請遵循Android藍牙HCI要求 。具有合格芯片組的Android設備可以實現經典藍牙或經典藍牙和BLE。 BLE與較舊的藍牙芯片組不向後兼容。

在Android 8.0中,本機藍牙堆棧完全符合藍牙5的要求。要使用可用的藍牙5功能,設備需要具有藍牙5合格的芯片組。

Android 8.0架構

藍牙應用程序通過Binder與藍牙進程通信。藍牙過程使用JNI與藍牙堆棧進行通信,並為開發人員提供對各種藍牙配置文件的訪問權限。下圖顯示了藍牙堆棧的一般結構:

Android 8.0藍牙架構
圖1. Android 8.0藍牙架構
應用框架
在應用程序框架級別是應用程序代碼,它使用android.bluetooth API與藍牙硬件進行交互。在內部,此代碼通過Binder IPC機制調用藍牙過程。
藍牙系統服務
位於packages/apps/Bluetooth的Bluetooth系統服務打包為Android應用程序,並在Android框架層實現Bluetooth服務和配置文件。該應用程序通過JNI調用本機藍牙堆棧。
傑尼
與android.bluetooth關聯的JNI代碼位於packages/apps/Bluetooth/jni 。當某些藍牙操作發生時,例如發現設備時,JNI代碼將調用藍牙堆棧。
藍牙堆棧
默認的藍牙堆棧在AOSP中提供,並且位於system/bt 。該協議棧實現了通用的藍牙HAL,並通過擴展和配置更改對其進行了自定義。
供應商實施
供應商設備使用硬件接口設計語言(HIDL)與藍牙堆棧進行交互。

HIDL

HIDL定義了藍牙協議棧和供應商實施之間的接口。要生成Bluetooth HIDL文件,請將Bluetooth接口文件傳遞到HIDL生成工具中。接口文件位於hardware/interfaces/bluetooth

藍牙堆棧開發

Android 8.0藍牙堆棧是完全合格的藍牙堆棧。資格列表在Bluetooth SIG網站上的QDID 97584下

核心藍牙堆棧位於system/bt 。開發在AOSP中進行,歡迎您的貢獻。

Android 7.x和更早的架構

藍牙系統服務通過JNI與藍牙堆棧進行通信,並通過Binder IPC與應用程序進行通信。該系統服務使開發人員可以訪問各種藍牙配置文件。下圖顯示了藍牙堆棧的一般結構:

Android藍牙架構
圖2. Android 7.x和更早的藍牙架構
應用框架
在應用程序框架級別是應用程序代碼,該代碼利用android.bluetooth API與藍牙硬件進行交互。在內部,此代碼通過Binder IPC機制調用藍牙過程。
藍牙系統服務
位於packages/apps/Bluetooth的Bluetooth系統服務被打包為Android應用程序,並在Android框架層實現了Bluetooth服務和配置文件。該應用通過JNI調用HAL層。
傑尼
android.bluetooth關聯的JNI代碼位於packages/apps/Bluetooth/jni 。當發生某些藍牙操作(例如發現設備)時,JNI代碼調用HAL層並從HAL接收回調。
哈爾
硬件抽象層定義了android.bluetooth API和Bluetooth處理調用到的標準接口,並且必須實現這些標準接口才能使Bluetooth硬件正常工作。藍牙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.hbluetooth.h文件包含藍牙堆棧的基本接口,您必須實現其功能。

特定於配置文件的文件位於同一目錄中。有關詳細信息,請參見《 HAL文件參考》