安卓BLE知识及EasyBle的使用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了安卓BLE知识及EasyBle的使用相关的知识,希望对你有一定的参考价值。

参考技术A

BLE(Bluetooth low energy)蓝牙低功耗是蓝牙4.0新增的子规范,其具有低能耗、低成本、低延迟、传输距离长等特点,自安卓4.3(api level 18)起,安卓开始支持BLE。BLE与经典蓝牙对比如下图():

在讲链接参数之前,需要先了解连接事件Connection Events
1)Conection Events(连接事件)
蓝牙设备建立连接后,所有信息的交换都是通过Connetion Events进行的,主设备在Connection Events开始起发送数据包,从属设备在Connection Events期间回复。Connection Events是周期性出现的且时间间隔很短,在一个Connection Events中,器件最大电流为十几mA,平均电流1uA,这便是BLE功耗较低的原因。Connection Events如下图()

2)链接参数
在两个蓝牙设备建立连接进入连接状态前,蓝牙设备需要设置一系列的链接参数,链接参数是在中心设备向外围设备发起连接请求时传递的:

当外围设备认为中心设备请求的链接参数不合适时,外围设备可在连接期间发送一个 Connetion Parameter UpdateRequest 请求中心设备更改链接参数。当中心设备收到请求时可接受或拒绝外围设备的链接参数更新请求

GATT层级图如下(图片来自 蓝牙官网 )

MTU(Maximum Transmission Unit): 即数据的最大传输单元。具体是指一个Chracteristic一次性可传输的数据大小。
蓝牙核心规范(core spec)中定义了ATT的默认MTU为23byte,除去ATT的opcode一个字节以及ATT的handle2个字节之后,剩下的20个字节便是留给GATT的了。由于ATT的最大长度为512byte,故一般认为MTU的最大长度为512个byte。
注:core spec规定每一个设备都必须支持MTU为23。

用系统api开发参见 安卓BLE开发官方文档
这里介绍使用第三方库 EasyBle 快速开发BLE

在项目根gradle中添加

在具体module的gradle中添加

1)判断设备是否支持BLE并打开蓝牙

安卓版本不小于6.0的,扫描必须要有定位权限,若版本为android10及以上,则需精确定位权限(即 Manifest.permission.ACCESS_FINE_LOCATION )

当需要结束扫描时用以下方法结束扫描,建议在扫描到目标设备后停止扫描

当需要断开与设备的连接时可使用以下任一方法断开设备连接

notify和indicate都使用以下方法

当需要取消notify或indicate时调用以下方法

如果一次性写入的数据长度大于MTU即最大传输单元(默认是20字节),则可以使用下列方法进行分批写入

当结束BLE通信时不要忘了调用destroy


BLE蓝牙抓包工具使用尝试

参考技术A 没接触过低功耗蓝牙协议,也没实际开发过和低功耗蓝牙有关的东西,最近需要获取一款低功耗蓝牙产品的数据,听说有专门的低功耗蓝牙抓包工具和软件可供使用,刚好手里也有硬件(USB蓝牙适配器),就硬着头皮,准备尝试一下,因为还在尝试阶段,很多知识点还不甚明了,所以我会随时更改此文里面的内容。

以上是关于安卓BLE知识及EasyBle的使用的主要内容,如果未能解决你的问题,请参考以下文章

微信小程序蓝牙模块BLE开发说明基础知识

安卓 4.3 BLE

Arduino ESP32 BLE蓝牙和安卓端蓝牙数据交互实验

[安卓] 20基于蓝牙BLE的广播包高频快速搜索

使用 Android BLE 读取特征值

安卓4.3以上版本已经完美支持BLE(英文版)