蓝牙低功耗
简介
Android 4.3(API 级别 18)为发挥核心作用的蓝牙低功耗 (BLE) 引入内置平台支持,并提供相应 API,方便应用发现设备、查询服务和传输信息。
常见用例包括:
在临近设备间传输少量数据。
与 Google Beacons 等近程传感器交互,以便为用户提供基于其当前位置的自定义体验。
关键概念
通用属性配置文件 (GATT) — GATT 配置文件是一种通用规范,内容针对在 BLE 链路上发送和接收称为“属性”的简短数据片段。目前所有低功耗应用配置文件均以 GATT 为基础。
属性协议 (ATT) — 属性协议 (ATT) 是 GATT 的构建基础,二者的关系也被称为 GATT/ATT。ATT 经过优化,可在 BLE 设备上运行。为此,该协议尽可能少地使用字节。每个属性均由通用唯一标识符 (UUID) 进行唯一标识,后者是用于对信息进行唯一标识的字符串 ID 的 128 位标准化格式。由 ATT 传输的属性采用特征和服务格式。
特征(Characteristic) — 特征包含一个值和 0 至多个描述特征值的描述符。您可将特征理解为类型,后者与类类似。
描述符(Descriptor) — 描述符是描述特征值的已定义属性。例如,描述符可指定人类可读的描述、特征值的可接受范围或特定于特征值的度量单位。
服务(Service) — 服务是一系列特征。例如,您可能拥有名为“心率监测器”的服务,其中包括“心率测量”等特征。您可以在 bluetooth.org 上找到基于 GATT 的现有配置文件和服务的列表。
以下是相关关系图,一个设备包含多个服务,一个服务包含多个特征,一个特征具备多个描述
实践
1、权限申请
<uses-permission android:name="android.permission.BLUETOOTH"/>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
<!-- If your app targets Android 9 or lower, you can declare
ACCESS_COARSE_LOCATION instead. -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
val enableBtIntent = Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE)
startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT)
2、扫描周边设备
扫描设备时候要先获取现获取bluetoothAdapter对象
val bluetoothManager = context.getSystemService(Context.BLUETOOTH_SERVICE) as BluetoothManager
val bluetoothAdapter = bluetoothManager.adapter
使用bluetoothAdapter的方法startLeScan(),方法里面leScanCallback是一个回调参数,扫描之后的结果会在里面触发
bluetoothAdapter.startLeScan(leScanCallback)
回调对象里面可以获取扫描到到设备对象bluetoothDevice,设备信号rssi,设备提供的配对号byte,之后可以将结果显示到相关UI上面
private val leScanCallback =
BluetoothAdapter.LeScanCallback {
bluetoothDevice, rssi, byte ->
if (bluetoothDevice == null){
return@LeScanCallback
} else {
Log.d(TAG, bluetoothDevice.name + "->" + bluetoo