一,前期基础知识储备
1)蓝牙是一种支持设备之间短距离通信的无线电技术(其他还包括红外,WIFI);
支持移动电话、笔记本电脑、无线耳机等设备之间进行信息的交换;
Android支持的蓝牙协议栈:Bluz,BlueDroid,BLE;
- Bluz是Linux推出的,目前使用最广泛;
- BlueDroid是Android4.0之后推出来的,简化了Bluz的操作;
- BLE是最新的低功耗协议,传输效率和传输速率都是很高的;
2)蓝牙开发技术一共分为两种:
- 经典蓝牙,3.0版本以下的蓝牙,功耗高,传输数据量大,有效距离10米;
- 低功耗蓝牙BLE,4.0及以上版本,低功耗,数据量小,有效距离40米;
经典蓝牙的开发包括蓝牙的互相连接、读取蓝牙列表、文件传输、蓝牙耳机等等;
特点:基于Socket连接,传输速率快;缺点:耗电,距离短;
通信的流程,发现设备 -> 配对/绑定设备 -> 建立连接 -> 数据通信 -> 断开连接
BLE蓝牙开发主要是低功耗设备(临近设备间传输少量数据),比如血糖仪、蓝牙手环、蓝牙手表、蓝牙温度枪等等;Android 4.3(API 级别 18)为发挥核心作用的蓝牙低功耗 (BLE) 引入内置平台支持,并提供相应 API,方便应用发现设备、查询服务和传输信息。与传统蓝牙不同,蓝牙低功耗 (BLE) 旨在提供显著降低的功耗。这使 Android 应用可与功率要求更严格的 BLE 设备(例如近程传感器、心率监测仪和健身设备)通信。
注意:当用户使用 BLE 将其设备与其他设备配对时,用户设备上的所有应用都可以访问在这两个设备间传输的数据。
因此,如果您的应用捕获敏感数据,您应实现应用层安全以保护此类数据的私密性。
3)蓝牙通信底层原理:
Android 平台包含蓝牙网络堆栈支持,此支持能让设备以无线方式与其他蓝牙设备交换数据。应用框架提供通过 Android Bluetooth API 访问蓝牙功能的权限。这些 API 允许应用以无线方式连接到其他蓝牙设备,从而实现点到点和多点无线功能。
为了让支持蓝牙的设备能够在彼此之间传输数据,它们必须先通过配对过程形成通信通道。其中一台设备(可检测到的设备)需将自身设置为可接收传入的连接请求。另一台设备会使用服务发现过程找到此可检测到的设备。在可检测到的设备接受配对请求后,这两台设备会完成绑定过程,并在此期间交换安全密钥。二者会缓存这些密钥,以供日后使用。完成配对和绑定过程后,两台设备会交换信息。当会话完成时,发起配对请求的设备会发布已将其链接到可检测设备的通道。但是,这两台设备仍保持绑定状态,因此在未来的会话期间,只要二者在彼此的范围内且均未移除绑定,便可自动重新连接。
4)关键类和接口
android.bluetooth 包中提供所有 Bluetooth API。以下概要列出了创建蓝牙连接所需的类和接口:
BluetoothAdapter
表示本地蓝牙适配器(蓝牙无线装置)。BluetoothAdapter 是所有蓝牙交互的入口点。借助该类,您可以发现其他蓝牙设备、查询已绑定(已配对)设备的列表、使用已知的 MAC 地址实例化 BluetoothDevice,以及通过创建 BluetoothServerSocket 侦听来自其他设备的通信。
<!--蓝牙连接权限-->
<uses-permission android:name="android.permission.BLUETOOTH" />
<!--蓝牙通讯权限-->
<uses