http://www.ifeegoo.com/relationship-between-android-version-and-bluetooth-version.html
摘要:Android 版本與 Bluetooth 版本之間是否存在必然關係?答案是否定的。不同版本的 Android 系統是否有針對不同版本的 Bluetooth 模塊提供官方的 API 供開發者調用,這個纔是關鍵。
最近開始 Bluetooth 開發,一直糾結一個問題:
Android 版本與 Bluetooth 版本之間是否存在必然關係?例如:Android 4.3 版本的手機上的 Bluetooth 模塊一定是支持 BLE (Bluetooth Low Energy) 的嗎?
答案是否定的,比如說有一個設備廠商,在自己的 Android 4.3 系統的設備上移除了 Bluetooth 模塊,或者在自己的 Android 4.3 系統設備上的 Bluetooth 模塊仍然採用的是 Bluetooth 2.1 ,這種情況在理論上來說是有可能的。當然,正常情況下,設備廠商如果要在自己的 Android 4.3 系統設備上提供 Bluetooth 模塊的話,一定會考慮到自己的
Bluetooth 版本和當前設備的 Android 系統版本之間的關係,這是針對設備的普通使用者和開發者考慮的問題。當然,如果說設備廠商生產了一款 Android 1.6 系統的設備,在上面採用了 BLE 模塊,當然由於 Android 1.6 系統沒有對 BLE 操作的 API。如果說所有 Android 1.6 系統不支持的對 BLE 模塊的操作,都自己開發相應的 API,也是可以完成在 Android 1.6 系統的設備上對 BLE 操作的。這種情況,從理論上來說也是可行的,只不過一般不會有廠商這麼做。
針對我們這種非定製 Android 設備開發者來說,我們首要關心的是不同版本的 Android 系統是否有針對不同版本的 Bluetooth 提供官方的 API 供開發者調用。當然,針對不同的 Bluetooth 方案商,比如 Nordic (www.nordicsemi.com/),會有自己的特定的
API,當然這些 API 對於 Android 開發者來說,都是基於Android API基礎上實現的,這些就先另當別論了。
通過 Android 官網資料,我們可以看到從 Android 1.0 (API Level 1) – Android 4.4W (API Level 20) 中 Android 官方版本的更迭對 Bluetooth 支持的變化。
Android 1.0 Base / API Level 1
API:不支持 Bluetooth
Android 1.1 Base / API Level 2
API:不支持 Bluetooth
Android 1.5 Cupcake / API Level 3
新增 Bluetooth 功能:
1.立體聲 Bluetooth 支持:
A2DP [Advanced Audio Distribution Profile]
AVCRP [Audio/Video Remote Control Profile]
2.自動配對
3.提升 Handsfree 體驗
API:支持 Bluetooth
(備註:Android 官方已經從此版本開始有支持 Bluetooth 的 API,但是 Android 官方將所有有關 Bluetooth 的 API 隱藏,並且註明:此版本的 Bluetooth API 非最終確定,將來可能會變,如果使用的話,請自擔風險!)
1 |
@hide
AtCommandHandler.java |
2 |
@hide
AtCommandResult.java |
4 |
@hide
BluetoothA2dp.java |
5 |
@hide
BluetoothAudioGateway.java |
6 |
@hide
BluetoothClass.java |
7 |
@hide
BluetoothDevice.java |
8 |
@hide
BluetoothError.java |
9 |
@hide
BluetoothHeadset.java |
10 |
@hide
BluetoothIntent.java |
12 |
@hide
HeadsetBase.java |
13 |
@hide
RfcommSocket.java |
16 |
備註:部分源碼是從非
Android 官方獲取,請謹慎參考! |
此 Android 版本中的 Bluetooth API 全部隱藏,但是我們可以通過反射來調用!
Android 1.6 Donut / API Level 4
無新增 Bluetooth 功能
API:無較大更改
Android 2.0 Eclair / API Level 5
新增 Bluetooth 功能:
1.支持 Bluetooth 2.1
2.新 Profile
OPP [Object Push Profile]
PBAP [Phone Book Access Profile]
新增 API:
1.打開/關閉 Bluetooth
2.設備和服務掃描
3.通過 RFCOMM 連接遠程設備並且發送和接收數據
4.發佈 RFCOMM 服務並且監聽傳入的 RFCOMM 連接
3 |
@hide
BluetoothDevicePicker.java |
4 |
@hide
BluetoothInputStream.java |
5 |
@hide
BluetoothOutputStream.java |
6 |
@hide
BluetoothPbap.java |
7 |
@hide
BluetoothUuid.java |
8 |
BluetoothServerSocket.java |
24 |
備註:部分源碼是從非
Android 官方獲取,請謹慎參考! |
Android 2.0.1 Eclair_0_1 / API Level 6
無新增 Bluetooth 功能
新增 API:
1.ACTION_REQUEST_ENABLE 和 ACTION_REQUEST_DISCOVERABLE 返回值變化:
2 |
return
RESULT_OK 表示 Bluetooth 成功啓用 |
3 |
return
RESULT_CANCELED 表示用戶拒絕詢問啓用 Bluetooth |
6 |
ACTION_REQUEST_DISCOVERABLE |
7 |
return
RESULT_CANCELED 表示用戶拒絕詢問啓用 Bluetooth 或者 Bluetooth 未被成功啓用 |
Android 2.1.x Eclair_MR1 / API Level 7
無新增 Bluetooth 功能
5 |
備註:部分源碼是從非
Android 官方獲取,請謹慎參考! |
Android 2.2.x Froyo / API Level 8
新增 Bluetooth 功能:
1.通過 Bluetooth 語音撥號
2.與其它設備分享聯繫人
3.支持車載 Bluetooth 和 Desk Docks
4.改善與車載套件和耳機的兼容性矩陣
5 |
備註:部分源碼是從非
Android 官方獲取,請謹慎參考! |
Android 2.3/2.3.1/2.3.2 Gingerbread / API Level 9
無新增 Bluetooth 功能
3 |
@hide
BluetoothDeviceProfileState.java |
4 |
@hide
BluetoothProfileState.java |
5 |
BluetoothRebootStressTest.java |
6 |
BluetoothStressTest.java |
7 |
BluetoothTestRunner.java |
8 |
BluetoothTestUtils.java |
10 |
備註:部分源碼是從非
Android 官方獲取,請謹慎參考! |
Android 2.3.3/2.3.4 Gingerbread_MR1 / API Level 10
無新增 Bluetooth 功能
新增 API:
1.添加了對 Bluetooth 非安全 Socket 連接的 platform 和 API 的支持。可以讓那些不需要提供驗證界面的應用通過簡單的設備來通信
Android 3.0.x Honeycomb / API Level 11
新增 Bluetooth 功能:
1.能讓應用查詢已經連接上 Bluetooth 設備的 Bluetooth Profile、音頻狀態等,然後通知用戶
2.可以通過 Bluetooth 來連接全鍵盤
3.新增對 Bluetooth tethering 的支持意味着更多類型的設備能夠共享 Android 設備的網絡連接
新增 API:
1.允許應用檢驗已經連接上 Bluetooth A2DP 和 Headset Profile 的設備的狀態,比如設備是否已經連接上或者設備當前的電量
2. Bluetooth 設備連接和斷開時回調
3 |
BluetoothAssignedNumbers.java |
13 |
BluetoothAudioGateway.java |
14 |
BluetoothDevicePicker.java |
15 |
BluetoothProfileState.java |
16 |
BluetoothInputStream.java |
17 |
BluetoothOutputStream.java |
19 |
BluetoothRebootStressTest.java |
20 |
BluetoothStressTest.java |
21 |
BluetoothTestRunner.java |
22 |
BluetoothTestUtils.java |
27 |
備註:部分源碼是從非
Android 官方獲取,請謹慎參考! |
Android 3.1.x Honeycomb_MR1 / API Level 12
新增 Bluetooth 功能:
1.系統可以通過 Bluetooth HID 方式同時接入一到多款輸入設備
2.新增支持操作杆和遊戲手柄 Bluetooth HID 方式連接
API 變化未知 (未拿到源碼)
Android 3.2 Honeycomb_MR2 / API Level 13
無新增 Bluetooth 功能
API 變化未知 (未拿到源碼)
5 |
備註:部分源碼是從非
Android 官方獲取,請謹慎參考! |
Android 4.0/4.0.1/4.0.2 Ice Cream Sandwich / API Level 14
新增 Bluetooth 功能:
1.新增支持連接 Bluetooth HDP [Health Device Profile)] 設備,通過第三方應用的支持,用戶可以連接到醫院、健身中心或者家庭等場合中的無線醫療設備和傳感器。
2.開發者可以使用 Android Beam (Android 自帶 NFC 功能) 通過 Bluetooth 來實現連接和數據傳輸,不需要用戶可視配對。
新增 API:
1.可以與 Bluetooth HDP [Health Device Profile)] 設備連接和通信。
3 |
@hide
BluetoothInputDevice.java |
4 |
@hide
BluetoothPan.java |
5 |
@hide
BluetoothDeviceProfileState.java |
6 |
@hide
BluetoothTetheringDataTracker.java |
8 |
BluetoothHealthAppConfiguration.java |
9 |
BluetoothHealthCallback.java |
13 |
@hide
AtCommandHandler.java |
14 |
@hide
AtCommandResult.java |
16 |
@hide
BluetoothAudioGateway.java |
17 |
@hide
BluetoothDevicePicker.java |
18 |
@hide
BluetoothProfileState.java |
19 |
@hide
BluetoothInputStream.java |
20 |
@hide
BluetoothOutputStream.java |
21 |
@hide
BluetoothPbap.java |
22 |
@hide
BluetoothUuid.java |
23 |
@hide
HeadsetBase.java |
24 |
BluetoothRebootStressTest.java |
25 |
BluetoothStressTest.java |
26 |
BluetoothTestRunner.java |
27 |
BluetoothTestUtils.java |
30 |
備註:部分源碼是從非
Android 官方獲取,請謹慎參考! |
Android 4.0.3/4.0.4 Ice Cream Sandwich_MR1 / API Level 15
無新增 Bluetooth 功能
3 |
fetchUuidsWithSdp()
getUuids() |
4 |
讓應用能夠檢測到遠程設備支持的特性(UUIDs) |
6 |
系統將執行一個遠程設備的服務掃描來獲取支持的UUID,然後會發送
ACTION_UUID的廣播結果 |
8 |
備註:部分源碼是從非
Android 官方獲取,請謹慎參考! |
Android 4.1 4.1.1 Jelly Bean / API Level 16
無增 Bluetooth 功能
新增 API:
1.此 Android 版本的設備可以使用 Android Beam 功能通過 Bluetooth 來發送圖片和視頻。在雙方設備上,Android Beam 使用 NFC 功能開啓 Bluetooth ,立即配對,一旦完成任務就會自動的斷開 Bluetooth 連接。
2.Android Beam 功能已經支持通過 Bluetooth 傳輸大數據。在設備間不需要可見的配對。你的應用無需其它操作就可以利用 Bluetooth 來傳輸數據。
3.MediaRouter MediaRouteActionProvider MediaRouteButton 爲播放媒體提供了標準的機制和界面。內置支持有線耳機和 A2DP Bluetooth 耳機和揚聲器,可以在你的應用中添加自定義的 Routing 選項。
Android 4.2/4.2.2 Jelly Bean_MR1 / API Level 17
新增 Bluetooth 變化:
1.引入了一種新的針對 Android 設備優化的 Bluetooth 協議棧 BlueDroid,從而取代 BlueZ 協議棧。Bluedroid 協議棧由 Google 和 Broadcom 公司共同開發,相對於 BlueZ 協議棧,BlueDroid 提升了兼容性和可靠性。
************************************************************************************************************
關於 Android 中的 Bluetooth 協議棧的說明:
Android 4.2 版本系統之前,Google 一直使用的是 Linux 官方 Bluetooth 協議棧,即知名老牌開源項目 BlueZ。BlueZ 實際上是由高通公司在2001年5月基於 GPL 協議發佈的一個開源項目,該項目僅發佈一個月後就被 Linux 之父 Linux Torvalds 納入了 Linux 內核,並做爲 Linux 2.4.6 內核的官方 Bluetooth 協議棧。隨着 Android 設備的流行,BlueZ 也得到了極大的完善和擴展。例如 Android 4.1 版本系統中
BlueZ 的版本升級爲4.93,它支持 Bluetooth 核心規範 4.0,並實現了絕大部分的 Profile。
BlueZ 現在正處於其巔峯時期,但好景不長。從Android 4.2 即 Jelly Bean 開始,Google 便在 Android 源碼中推出了它和博通公司一起開發的 BlueDroid 以替代 BlueZ。雖然因爲時間及成熟度的原因,大部分手機廠商在 Android 4.2 中仍繼續使用 BlueZ。但據筆者瞭解,BlueZ 的創始者,高通公司也將在基於其芯片的 Android 參考設計中去除 BlueZ,並僅支持BlueDroid。
BlueZ 的未來如何筆者姑且不論。不過,能讓高通改弦易轍,BlueDroid 自有其合理之處。相比 BlueZ,BlueDroid 最值得稱道的地方就是其框架結構變得更爲簡潔和清晰。另外,藉助 HAL(Hardware Abstraction Layer,硬件抽象層),BlueDroid 終於不再和 DBUS 有任何瓜葛。下圖所示爲 Android 4.2 中 BlueDroid 的框架結構圖:
由上圖可以看出,Android 4.2 中 BlueDroid 框架包括以下幾個部分:
1.應用程序通過 android.bluetooth 包下的API來調用系統的 Bluetooth 功能。
2.應用層空間增加了一個名爲 Bluetooth 的 App。它作爲系統的 Bluetooth 核心進程而存在。其內部將通過 JNI 來調用 Bluetooth HAL 層以完成各種藍牙請求。
3.Bluetooth HAL 也屬於 Android 4.2 新增模塊,它由藍牙核心規範硬件抽象層和藍牙應用規範硬件抽象層組成。由於 HAL 層的隔離作用,上層代碼可輕鬆移植到不同芯片平臺。
4.作爲整個藍牙服務的核心,Bluetooth Stack 模塊則由 Bluetooth Application Layer(BTA)和Bluetooth Embedded System(BTE)兩大部分組成。BTA 實現了藍牙設備管理、狀態管理及一些應用規範。而 BTE 則通過 HCI 與廠商藍牙芯片交互以實現了藍牙協議棧的通用功能和相關協議。另外,BTE 還包括一個統一內核接口(GKI),藍牙芯片廠商可藉助 GKI 快速輕鬆得移植藍牙協議棧到其他操作系統或手機平臺上。
5.Vendor Extentions(廠商擴展):開發者可以添加自定義擴展以實現廠商特定的模塊和組件。
除了 BlueDroid 外,在今年的 Google I/O 大會,谷歌公司還宣佈將於與蘋果、微軟和黑莓等公司共同支持 Bluetooth Smart Ready(BSR,藍牙智能就緒)和 Bluetooth Smart(BS,藍牙智能)技術。這項技術使藍牙設備或應用可以非常容易地連接全球成千上萬的藍牙設備,藍牙使用者的生活也因此變得更加簡單。BSR 和 BS 都是建立在藍牙核心規範4.0和 GATT 應用規範。即將發佈的 Android 4.3(MR2)支持 BSR 技術,使得 BS 的開發者可以輕易地將其設備和應用與
Android BSR 設備進行連接和發佈。藍牙使用者運用 BS 的智能應用配件(如健康監控或醫療設備)收集數據,再傳送到支持 BSR 設備(如智能手機或平板)上。
另外,藍牙 SIG 也正在研發工具 Bluetooth Application Accelerator(藍牙應用加速器)。據可靠消息,該工具將隨 Android 4.3 發佈,並將幫助開發者在 Android 4.3 上快速開發藍牙應用,從而加快相關產品的研發時間。
總結
本文對藍牙核心規範、藍牙應用規範以及 Android 4.2 中的藍牙協議棧 BlueDroid 進行了一些簡單介紹。從筆者瞭解的情況來看,BlueDroid 雖然對 BlueZ 大有取而代之的趨勢,但現在它對藍牙應用規範的支持還不夠完善。例如 BlueDroid 僅支持 AVRCP 1.0,而非最新的 AVRCP 1.5。所以,國內某些芯片或手機廠商若能及早完成 BlueZ 相關模塊到 BlueDroid 的移植工作,相信能幫助它們在競爭日趨白日化的移動世界中拔得先機。
另外,作爲一種成熟、低功耗無線通信技術的先鋒,藍牙未來在可穿戴設備領域中也將扮演越來越重要的作用。那時,藍牙或許就會真正像“牙齒”一樣成爲各種設備中不可或缺的一部分了。
************************************************************************************************************
說明:以上兩行”*”號中間的內容來自 CSDN 作者 ID 爲 Innost 的博客文章:
http://blog.csdn.net/innost/article/details/9187199,感謝他給予的參考,謝謝!
Android 4.3 Jelly Bean_MR2 / API Level 18
新增 Bluetooth 功能:
1.支持 BLE (Bluetooth Low Energy)
2.內置支持 Bluetooth AVRCP 1.3,基於 Google 和 Broadcom 公司功能研發的針對於 Android 設備優化的新的藍牙協議棧 BlueDroid
新增 API:
1.提供單獨的標準的 API 對 BLE (Bluetooth Low Energy) 的支持
備註:Classic Bluetooth,Bluetooth High Speed,Bluetooth Low Energy 同屬 Bluetooth 4.0 協議。Bluetooth 4.0 也叫做 Bluetooth Smart
4 |
BluetoothGattCallback.java |
5 |
BluetoothGattCharacteristic.java |
6 |
BluetoothGattDescriptor.java |
7 |
BluetoothGattServer.java |
8 |
BluetoothGattServerCallback.java |
9 |
BluetoothGattService.java |
12 |
備註:部分源碼是從非
Android 官方獲取,請謹慎參考! |
Android 4.4 Kitkat / API Level 19
新增 Bluetooth 功能:
1.新增兩種新 Proifle 支持:
HID [Human Interface Device]
MAP [Message Access Profile]
3 |
@hide
BluetoothMap.java |
5 |
備註:部分源碼是從非
Android 官方獲取,請謹慎參考! |
Android 4.4W / API Level 20
無新增 Bluetooth 功能
3 |
@hide
BluetoothAdvScanData.java |
4 |
BluetoothInstrumentation.java |
6 |
備註:部分源碼是從非
Android 官方獲取,請謹慎參考! |