安卓BLE知识及EasyBle的使用
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了安卓BLE知识及EasyBle的使用相关的知识,希望对你有一定的参考价值。
参考技术ABLE(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的使用的主要内容,如果未能解决你的问题,请参考以下文章