Android 4.4 蓝牙


Android4.3 规范了BLE的API,但是直到目前的4.4,还有些功能不完善。

在BLE协议中,有两个角色,周边(Periphery)和中央(Central);周边是数据提供者,中央是数据使用/处理者;在iOS SDK里面,可以把一个iOS设备作为一个周边,也可以作为一个中央;但是在Android SDK里面,直到目前最新的Android4.4.2,Android手机只能作为中央来使用和处理数据;那数据从哪儿来?从BLE设备来,现在的很多可穿戴设备都是用BLE来提供数据的。

一个中央可以同时连接多个周边,但是一个周边某一时刻只能连接一个中央。

大概了解了概念后,看看Android BLE SDK的四个关键类(class):

a) BluetoothGattServer作为周边来提供数据;BluetoothGattServerCallback返回周边的状态。

b) BluetoothGatt作为中央来使用和处理数据;BluetoothGattCallback返回中央的状态和周边提供的数据。

因为我们讨论的是Android的BLE SDK,下面所有的BluetoothGattServer代表周边,BluetoothGatt代表中央。

一、创建一个周边(虽然目前周边API在Android手机上不工作,但还是看看)

a)先看看周边用到的class,蓝色椭圆

Android 4.4 蓝牙_第1张图片

b)说明:

每一个周边BluetoothGattServer,包含多个服务Service,每一个Service包含多个特征Characteristic。

1.new一个特征:character = new BluetoothGattCharacteristic(

UUID.fromString(characteristicUUID),

BluetoothGattCharacteristic.PROPERTY_NOTIFY,

BluetoothGattCharacteristic.PERMISSION_READ);

2.new一个服务:service = new BluetoothGattService(UUID.fromString(serviceUUID),

BluetoothGattService.SERVICE_TYPE_PRIMARY);

3.把特征添加到服务:service.addCharacteristic(character);

4.获取BluetoothManager:manager = (BluetoothManager) getSystemService(Context.BLUETOOTH_SERVICE);

5.获取/打开周边:BluetoothGattServer server = manager.openGattServer(this,new BluetoothGattServerCallback(){...}); 

6.把service添加到周边:server.addService(service);

7.开始广播service:Google还没有广播Service的API,等吧!!!!!所以目前我们还不能让一个Android手机作为周边来提供数据。

二、创建一个中央(这次不会让你失望,可以成功创建并且连接到周边的)

a)先看看中央用到的class,蓝色椭圆

Android 4.4 蓝牙_第2张图片

b)说明:

为了拿到中央BluetoothGatt,可要爬山涉水十八弯:

1.先拿到BluetoothManager:bluetoothManager = (BluetoothManager) getSystemService(Context.BLUETOOTH_SERVICE);

2.再拿到BluetoothAdapt:btAdapter = bluetoothManager.getAdapter();

3.开始扫描:btAdapter.startLeScan( BluetoothAdapter.LeScanCallback);

4.从LeScanCallback中得到BluetoothDevice:public void onLeScan(BluetoothDevice device, int rssi, byte[] scanRecord) {.....}

5.用BluetoothDevice得到BluetoothGatt:gatt = device.connectGatt(this, true, gattCallback);

终于拿到中央BluetoothGatt了,它有一堆方法(查API吧),调用这些方法,你就可以通过BluetoothGattCallback和周边BluetoothGattServer交互了。

三、吐槽:

BluetoothAdapter.LeScanCallback是接口,但是BluetoothGattServerCallback和BluetoothGattCallback是抽象类,这两个抽象类让人很不爽,不知道google为什么要把他们搞成抽象类,完全可以搞成接口的嘛,或者又有抽象类又有接口也行啊,就像Runable和Thread一样多好。这两个抽象类对于有代码洁癖的人简直就是一种折磨,在方法参数里面new,还要实现父类方法,是在受不了。

Demo工程下载地址:http://download.csdn.net/detail/jimoduwu/7072515





  蓝牙规范介绍

作为一种通用的无线通信技术,规范自然是蓝牙技术的核心。蓝牙规范可分为两个层次,如图1所示:

Android 4.4 蓝牙_第3张图片

1  蓝牙规范的层次结构

由图1可知蓝牙规范包括:

  • Core Specification(核心规范),用于规定蓝牙设备必须实现的通用功能和协议层次。它由软件和硬件模块组成,两个模块之间的信息和数据通过主机控制接口(HCI)的解释才能进行传递。
  • Profiles(蓝牙应用规范),它从应用场景的角度为蓝牙技术的使用制定了不同的规范。这也是和大众日常生活接触最多的一部分。蓝牙支持很多Profiles,下文将介绍几种使用最广泛的蓝牙应用规范。

 

1.1  蓝牙核心规范介绍

核心规范是蓝牙协议家族的基础,自蓝牙技术联盟(Bluetooth SIGSpecial Interest Group)在1999年颁布蓝牙核心规范1.0版本以来,到目前为止蓝牙SIG一共发布了七个重要版本。每一个版本都促使蓝牙技术朝着更快、更安全、更省电的方向发展。表1所示为蓝牙核心规范[①]发展历史。

1  蓝牙核心规范发展介绍

版本

规范发布日期

增强功能

0.7

1998年10月19日

Baseband、LMP

0.8

1999年1月21日

HCI、L2CAP、RFCOMM

0.9

1999年4月30日

OBEX与IrDA的互通性

1.0 Draft

1999年7月5日

SDP、TCS

1.0 A

1999年7月26日

第一个正式版本

1.0 B

2000年10月1日

安全性,厂商设备之间连接兼容性

1.1

2001年2月22日

IEEE 802.15.1

1.2

2003年11月5日

快速连接、自适应跳频、错误检测和流程控制、同步能力

2.0 + EDR

2004年11月9日

EDR传输率提升至2-3Mbps

2.1 + EDR

2007年7月26日

扩展查询响应、简易安全配对、暂停与继续加密、Sniff省电

3.0 + HS

2009年4月21日

交替射频技术、802.11协议适配层、电源管理、取消了UMB的应用

4.0 +BLE

2010年6月30日

低功耗物理层和链路层、AES加密、Attribute Protocol(ATT)、Generic Attribute Profile(GATT)、Security Manager(SM)

1中,

  • EDR:全称为Enhanced Data Rate。通过提高多任务处理和多种蓝牙设备同时运行的能力,EDR使得蓝牙设备的传输速度可达3Mbps。
  • HS:全称为High Speed。HS使得Bluetooth能利用WiFi作为传输方式进行数据传输,其支持的传输速度最高可达24Mbps。其核心是在802.11的基础上,通过集成802.11协议适配层,使得蓝牙协议栈可以根据任务和设备的不同,选择正确的射频。
  • BLE:全称为Bluetooth Low Energy。蓝牙规范4.0最重要的一个特性就是低功耗。BLE使得蓝牙设备可通过一粒纽扣电池供电以维持续工作数年之久。很明显,BLE使得蓝牙设备在钟表、远程控制、医疗保健及运动感应器等市场具有极光明的应用场景。

虽然蓝牙4.0规范3年就发布,但目前使用最广泛的蓝牙核心规范版本还是3.0。智能手机中只有Iphone 4SIphone5,三星GallaxyS3S4Note2等少数设备支持蓝牙4.0。不过,Google已经在Android 4.3中添加了对4.0的支持。很明显,随着Android的持续推进和众多厂商的齐力支持,笔者估计在未来较短的一段时间内,蓝牙核心规范4.0将得到迅速普及。表2是经典蓝牙与低功耗蓝牙的一些区别:

2  经典蓝牙与低功耗蓝牙的区别

技术规范

经典蓝牙(2.1 &3.0)

低功耗蓝牙(4.0)

无线电频率

2.4GHz

2.4GHz

距离

10米/100米

30米

数据速率

1-3Mbps

1Mbps

应用吞吐量

0.7-2.1Mbps

0.2Mbps

发送数据的总时间

100ms

<6ms

耗电量

1

0.01至0.5

最大操作电流

<30mA

<15mA(最高运行时为15 mA)

主要用途

手机游戏机耳机,立体声音频流,汽车PC

手机,游戏机,PC体育健身医疗保健,汽车,家用电子自动化工业

那么,蓝牙核心规范4.0有什么特别之处呢?蓝牙核心规范4.0的模块如图2所示:

Android 4.4 蓝牙_第4张图片

2  蓝牙核心规范4.0的模块

由图2可知,蓝牙核心规范4.0的模块增加了以下几个蓝牙低功耗组件。

  • GATT表示服务器属性和客户端属性,描述了属性服务器中使用的服务层次,特点和属性。BLE设备使用它作为蓝牙低功耗应用规范的服务发现。
  • ATT实现了属性客户端和服务器之间的点对点协议。ATT客户端给ATT服务器发送请命令。ATT服务器向ATT客户端发送回复和通知。
  • SMP用于生成对等协议的加密密钥和身份密钥。SMP管理加密密钥和身份密钥的存储,它通过生成和解析设备的地址来识别蓝牙设备。

1.2  蓝牙应用规范[②]

蓝牙SIG根据不同的应用场景定义了不同的蓝牙应用规范,截止到现在,发布了40个蓝牙应用规范。本节介绍最常用的五个的蓝牙应用规范。

1.2.1  Advanced Audio Distribution Profile

Advanced Audio Distribution Profile 简称为A2DP(高质量音频分发规范)定义了如何将立体声质量的音频通过流媒体的方式从媒体源传输到接收器上。A2DP使用Asynchronous Connectionless LinkACL,蓝牙异步传输)信道传输高质量音频内容,它依赖于Generic Audio/Video Distribution ProfileGAVDP,通用音频/视频分发规范)。A2DP必须支持低复杂度及Sub-bandCodecSBC,低带宽编解码),可选支持MPEG12音频,MPEG24AACA2DP的应用场景如图4[1]所示:A2DP的应用场景如图3所示:

Android 4.4 蓝牙_第5张图片

3  A2DP的应用场景

由图3可知,A2DP有两种应用场景分别是播放和录音。

  • 播放场景是具有蓝牙功能的播放器通过A2DP向蓝牙耳机或蓝牙立体声扬声器传送高质量音频。
  • 录音场景是具有蓝牙功能的麦克风通过A2DP向蓝牙录音器传送高质量音频。

A2DP相关的规范有Video Distribution ProfileVDP,视频分发规范),Audio/Video Remote Control ProfileAVRCP,音频/视频运程控制规范)。

1.2.2  Object Push Profile

OPP(对象推送规范)定义了推送服务器和客户端之间基于Generic Object Exchange ProfileGOEP,通用对象交换规范)进行对象交换的规范。OPP的应用场景如图4所示:

Android 4.4 蓝牙_第6张图片

4  OPP的应用场景

由图4可知,OPP主要用于手机与手机或者手机与电脑之间通过蓝牙进行文件操作。可交换的文件类型有电话本,备忘录,日程表等文本文件,还有视频,声音,图片,音乐等多媒体文件。

Wi-Fi DirectWiFi直连)[③]和蓝牙OPP有相同的功能。WiFi直连是WiFi设备之间不需要无线路由器,直接进行对象交换。它的优点是传输距离长、速度快,缺点是功耗高。

1.2.3  Hands-Free Profile

HFPHFP,免提规范)定义了蓝牙音频网关设备如何通过蓝牙免提设备拨打和接听电话。HFP的应用场景如图5所示:

Android 4.4 蓝牙_第7张图片

5  HFP的应用场景

由图5可知,HFP包括两个角色:

  • Audio Gateway(AG,音频网关)和Hands-Free Unit(HF,免提设备)。AG是音频输入和输出的设备,典型的AG设备是手机。HF是执行音频网关的远程音频输入输出设备。
  • HFP常见的场景是汽车上的车载套件,当车载套件和耳机通过蓝牙方式连接到手机时,通过无线蓝牙耳机拨打和接听电话。

HFP相关的规范有Headset ProfileHSP,耳机规范),Phonebook Access ProfilePBAP,电话簿访问规范。

1.2.4  Heart Rate Profile

HRP(心率规范)定位与和医疗/健康相关的应用场景中,它使得蓝牙设备能与心率传感器交互。相关场景如图6所示:

Android 4.4 蓝牙_第8张图片

6  HRP的角色关系和应用场景

由图6可知:

  • 左图是HRP定义的角色关系。HRP中有两个角色:心率感应器和收集器。心率感应器是GATT服务器,是测量心率的设备,它包含心率服务和设备信息服务,心率服务导出心率测量数据;收集器是GATT客户端,是从心率感应器接收心率测量数据和其它数据的设备。
  • 右图是HRP的应用场景。心率规范用于让设备获得心率传感器的心率测量和其它数据。例如,护士或医生可以用心率传感器测量病人的心率,并把心率数据传到笔记本或手持设备上。

随着人口老龄化,医疗设备和医护人员资源不足,可以运用蓝牙健康规范实现远程医疗。笔者所在的Tieto公司在Android平台上运用心率规范开发了心率测量的原型程序,详细介绍请看视频http://www.youtube.com/watch?v=r_t-hstRgDs&feature=youtu.be

HRP相关的健康规范有Glucose ProfileGLP,血糖规范),Blood Pressure ProfileBLP,血压规范BLP),Health Thermometer ProfileHTP,健康体温计规范)。

1.2.5  Cycling Speed and Cadence Profile

CSCP(自行车速度和步调规范)让人们在骑自行车锻炼时跟踪速度和节奏。CSCP也基于GATT的规范。自行车速度和步调规范的角色关系和应用场景如图7所示:

Android 4.4 蓝牙_第9张图片

7  CSCP的角色关系和应用场景

由图7可知:

  • 左图是CSCP的角色关系。CSCP定义了两个角色:自行车速度和步调感应器和收集器。CSC感应器是GATT服务器,向收集器报告车轮转速数据或轴转速数据。CSC感应器包含CSC服务和设备信息服务;收集器是GATT客户端,从CSC感应器接收自行车的速度和步调数据。
  • 右图是CSCP的应用场景。传感器测量被广泛应用于运动和健身,通过传感器来监视和控制训练强调,以及在多个训练中衡量进展情况。自行车速度传感器和自行车踏频传感器是用户测量车轮速度或蹬踏节奏的设备。任何设备实现CSC规范可以与CSC传感器连接并接收数据。

CSCP相关的规范有Running Speed and Cadence ProfileRSCS,跑步速度和步调规范

  Android中的Bluetooth

Android 4.2之前,Google一直使用的是Linux官方蓝牙协议栈,即知名老牌开源项目BlueZBlueZ实际上是由高通公司在20015月基于GPL协议发布的一个开源项目,该项目仅发布一个月后就被Linux之父Linux Torvalds纳入了Linux内核,并做为Linux 2.4.6内核的官方蓝牙协议栈。随着Android设备的流行,BlueZ也得到了极大的完善和扩展。例如Android 4.1BlueZ的版本升级为4.93,它支持蓝牙核心规范4.0,并实现了绝大部分的Profiles

BlueZ现在正处于其巅峰时期,但好景不长。从Android 4.2Jelly Bean开始,Google便在Android源码中推出了它和博通公司一起开发的BlueDroid以替代BlueZ。虽然因为时间及成熟度的原因,大部分手机厂商在Android 4.2中仍继续使用BlueZ。但据笔者了解,BlueZ的创始者,高通公司也将在基于其芯片的Android参考设计中去除BlueZ,并仅支持BlueDroid

BlueZ的未来如何笔者姑且不论。不过,能让高通改弦易辙,BlueDroid自有其合理之处。相比BlueZBlueDroid最值得称道的地方就是其框架结构变得更为简洁和清晰。另外,借助HALHardware Abstraction Layer,硬件抽象层),BlueDroid终于不再和dbus有任何瓜葛。图8所示为Android 4.2BlueDroid的框架结构图[④]

Android 4.4 蓝牙_第10张图片

8  Android 4.2BlueDroid框架结构图

由图8可知,Android4.2BlueDroid框架包括以下几个部分:

  • 应用程序通过android.bluetooth package下的API来调用系统的Bluetooth功能。
  • 应用层空间增加了一个名为Bluetooth的App。它做为系统的bluetooth核心进程而存在。其内部将通过JNI来调用Bluetooth HAL层以完成各种蓝牙请求。
  • Bluetooth HAL也属于Android 4.2新增模块,它由蓝牙核心规范硬件抽象层和蓝牙应用规范硬件抽象层组成。由于HAL层的隔离作用,上层代码可轻松移植到不同芯片平台。
  • 作为整个蓝牙服务的核心,Bluetooth Stack模块则由Bluetooth Application Layer(缩写为BTA)和Bluetooth Embedded System(缩写为BTE)两大部分组成。BTA实现了蓝牙设备管理、状态管理及一些应用规范。而BTE则通过HCI与厂商蓝牙芯片交互以实现了蓝牙协议栈的通用功能和相关协议。另外,BTE还包括一个统一内核接口(GKI),蓝牙芯片厂商可借助GKI快速轻松得移植蓝牙协议栈到其他操作系统或手机平台上。
  • Vendor Extentions(厂商扩展):开发者可以添加自定义扩展以实现厂商特定的模块和组件。

除了BlueDroid外,在今年的Google I/O大会,谷歌公司还宣布将于与苹果、微软和黑莓等公司共同支持Bluetooth Smart ReadyBSR,蓝牙智能就绪)和Bluetooth SmartBS,蓝牙智能)技术。这项技术使蓝牙设备或应用可以非常容易地连接全球成千上万的蓝牙设备,蓝牙使用者的生活也因此变得更加简单。BSRBS都是建立在蓝牙核心规范4.0GATT应用规范。即将发布的Android 4.3MR2)支持BSR技术,使得BS的开发者可以轻易地将其设备和应用与Android BSR设备进行连接和发布。蓝牙使用者运用BS的智能应用配件(如健康监控或医疗设备)收集数据,再传送到支持BSR设备(如智能手机或平板)上。

另外,蓝牙SIG也正在研发工具Bluetooth Application Accelerator(蓝牙应用加速器)。据可靠消息,该工具将随Android 4.3发布,并将帮助开发者在Android 4.3上快速开发蓝牙应用,从而加快相关产品的研发时间。

  总结

本文对蓝牙核心规范、蓝牙应用规范以及Android 4.2中的蓝牙协议栈BlueDroid进行了一些简单介绍。

你可能感兴趣的:(Android)