一 GATT简介
蓝牙分为经典蓝牙和低功耗蓝牙(BLE),我们常用的蓝牙遥控器就是低功耗蓝牙
低功耗蓝牙(BLE)连接都是建立在 GATT (Generic Attribute Profile) 协议之上。
GATT全称Generic Attribute Profile(直译即:通用属性协议),是一个在蓝牙连接之上的发送和接收较短的数据段的通用规范,这些很短的数据段被称为属性(Attribute)。
二 GATT的结构
GATT的结构简单的讲,如下图:
gatt是多个service的集合,gatt包含多个不同的service
service下包含多个不同的Charcteristic(特征)
Charcteristic又包含value和Descriptor
image.png
每个Service和Charcteristic有一个唯一标识UUID
一般我们读取BLE设备的信息,就是读取Charcteristic下的Value值
所以我们需要知道service和Charcteristic的UUID,就能拿到这个Charcteristic下的值
三 如何知道指定的service和Charcteristic的UUID
一般使用BLE测试工具即可
我这里使用的BLE5.1ScanDemo apk,上传到网盘供大家使用
https://pan.baidu.com/s/1wyMMZbVJOQOq1QS5Am-mPg
提取码:6666
把BLE5.1ScanDemo apk安装到手机
遥控器或其他BLE设备与手机蓝牙配对连接
打开apk界面会显示已配对的蓝牙设备
image.png
点击击打开设备后,可以看到这个设备GATT下所有的service和对应的UUID
image.png
打开service后,可以看到service下所有的Charcteristic的和对应的UUID
点击Charcteristic后,在上面可以看到其Value值(如下图,读取到的是设备型号SCCN001)
image.png
四 如何建立GATT连接及如何读取Charcteristic下的数据
android 4.0以后添加了BLE的支持,在系统BluetoothDevice.java源码中已经提供了Gatt连接的接口函数
那么我们只需要找到指定的蓝牙设备获取它的BluetoothDevice实例,然后调用connectGatt函数即可
image.png
1、获取指定的蓝牙设备BluetoothDevice实例
image.png
2、建立GATT连接
使用上一步获取到的设备实例,调用connectGatt函数建立连接
image.png
3、重写GattCallback回调
在第2步建立GATT连接连接时,需要传入gattcallback实例
所以我们要先实例BluetoothGattCallback类并重写其回调函数,如图
这几个回调函数后续会用到
image.png
4、GATT连接成功,onConnectionStateChange()函数回调