摘要: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 非最终确定,将来可能会变,如果使用的话,请自担风险!)
@hide AtCommandHandler.java
@hide AtCommandResult.java
@hide AtParser.java
@hide BluetoothA2dp.java
@hide BluetoothAudioGateway.java
@hide BluetoothClass.java
@hide BluetoothDevice.java
@hide BluetoothError.java
@hide BluetoothHeadset.java
@hide BluetoothIntent.java
@hide Database.java
@hide HeadsetBase.java
@hide RfcommSocket.java
@hide ScoSocket.java
备注:部分源码是从非 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 连接
新增 API:
@hide BluetoothDevicePicker.java
@hide BluetoothInputStream.java
@hide BluetoothOutputStream.java
@hide BluetoothPbap.java
@hide BluetoothUuid.java
BluetoothServerSocket.java
BluetoothSocket.java
BluetoothAdapter.java
隐藏 API 开放:
BluetoothClass.java
BluetoothDevice.java
删除 API:
BluetoothError.java
BluetoothIntent.java
Database.java
RfcommSocket.java
备注:部分源码是从非 Android 官方获取,请谨慎参考!
Android 2.0.1 Eclair_0_1 / API Level 6
无新增 Bluetooth 功能
新增 API:
1.ACTION_REQUEST_ENABLE 和 ACTION_REQUEST_DISCOVERABLE 返回值变化:
ACTION_REQUEST_ENABLE
return RESULT_OK 表示 Bluetooth 成功启用
return RESULT_CANCELED 表示用户拒绝询问启用 Bluetooth
备注:不是以前那样返回 0,-1 或者 -2
ACTION_REQUEST_DISCOVERABLE
return RESULT_CANCELED 表示用户拒绝询问启用 Bluetooth 或者 Bluetooth 未被成功启用
备注:不是以前那样返回 0,-1 或者 -2
Android 2.1.x Eclair_MR1 / API Level 7
无新增 Bluetooth 功能
新增 API:
BasicAdapterTest.java
备注:部分源码是从非 Android 官方获取,请谨慎参考!
Android 2.2.x Froyo / API Level 8
新增 Bluetooth 功能:
1.通过 Bluetooth 语音拨号
2.与其它设备分享联系人
3.支持车载 Bluetooth 和 Desk Docks
4.改善与车载套件和耳机的兼容性矩阵
新增API:
AtParserTest.java
备注:部分源码是从非 Android 官方获取,请谨慎参考!
Android 2.3/2.3.1/2.3.2 Gingerbread / API Level 9
无新增 Bluetooth 功能
新增API:
@hide BluetoothDeviceProfileState.java
@hide BluetoothProfileState.java
BluetoothRebootStressTest.java
BluetoothStressTest.java
BluetoothTestRunner.java
BluetoothTestUtils.java
备注:部分源码是从非 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 设备连接和断开时回调
新增 API:
BluetoothAssignedNumbers.java
BluetoothProfile.java
移除 API:
AtCommandHandler.java
AtCommandResult.java
AtParser.java
AtParserTest.java
BasicAdapterTest.java
BluetoothAudioGateway.java
BluetoothDevicePicker.java
BluetoothProfileState.java
BluetoothInputStream.java
BluetoothOutputStream.java
BluetoothPbap.java
BluetoothRebootStressTest.java
BluetoothStressTest.java
BluetoothTestRunner.java
BluetoothTestUtils.java
BluetoothUuid.java
HeadsetBase.java
ScoSocket.java
备注:部分源码是从非 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 变化未知 (未拿到源码)
新增 API:
ConnectivityManager
TYPE_BLUETOOTH
备注:部分源码是从非 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)] 设备连接和通信。
新增 API:
@hide BluetoothInputDevice.java
@hide BluetoothPan.java
@hide BluetoothDeviceProfileState.java
@hide BluetoothTetheringDataTracker.java
BluetoothHealth.java
BluetoothHealthAppConfiguration.java
BluetoothHealthCallback.java
移除 API 重新加入:
@hide AtCommandHandler.java
@hide AtCommandResult.java
@hide AtParser.java
@hide BluetoothAudioGateway.java
@hide BluetoothDevicePicker.java
@hide BluetoothProfileState.java
@hide BluetoothInputStream.java
@hide BluetoothOutputStream.java
@hide BluetoothPbap.java
@hide BluetoothUuid.java
@hide HeadsetBase.java
BluetoothRebootStressTest.java
BluetoothStressTest.java
BluetoothTestRunner.java
BluetoothTestUtils.java
备注:部分源码是从非 Android 官方获取,请谨慎参考!
Android 4.0.3/4.0.4 Ice Cream Sandwich_MR1 / API Level 15
无新增 Bluetooth 功能
新增 API:
fetchUuidsWithSdp() getUuids()
让应用能够检测到远程设备支持的特性(UUIDs)
调用 fetchUuidsWithSdp()
系统将执行一个远程设备的服务扫描来获取支持的UUID,然后会发送 ACTION_UUID的广播结果
备注:部分源码是从非 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
新增 API:
BluetoothGatt.java
BluetoothGattCallback.java
BluetoothGattCharacteristic.java
BluetoothGattDescriptor.java
BluetoothGattServer.java
BluetoothGattServerCallback.java
BluetoothGattService.java
BluetoothManager.java
备注:部分源码是从非 Android 官方获取,请谨慎参考!
Android 4.4 Kitkat / API Level 19
新增 Bluetooth 功能:
1.新增两种新 Proifle 支持:
HID [Human Interface Device]
MAP [Message Access Profile]
新增 API:
@hide BluetoothMap.java
备注:部分源码是从非 Android 官方获取,请谨慎参考!
Android 4.4W / API Level 20
无新增 Bluetooth 功能
新增 API:
@hide BluetoothAdvScanData.java
BluetoothInstrumentation.java
备注:部分源码是从非 Android 官方获取,请谨慎参考!