android蓝牙ble框架,Android蓝牙基础框架使用详解

原标题:Android蓝牙基础框架使用详解

今日科技快讯

最新报道称,三星准备在8月末推出Galaxy Note 8,比iOS手机进入市场早了几个月。早在4月时就有Note 8的传闻了,说这款手机边框更窄,屏幕更大,配有双摄像头。按照传统,在推出Note智能手机之后,三星一般还会推出一款Note设备。这款新设备属于Note系列的变种,Note拥有更大的屏幕、安装手写笔,提供智能手机与平板功能。

作者简介

周末两天,全国多个城市经历了特大暴雨的洗礼,这也是我今年经历的最大的一场雨,不知道大家所在的城市有没有下雨呢?今天又要回到工作的轨道上来,新的一周希望大家也元气满满!

本篇来自幻影宇寰的投稿,分享了 Android BLE 基础框架使用详解,希望能够帮助到大家。

幻影宇寰的博客地址:

http://my.csdn.net/xiaoyaoyou1212

前言

研究了一段时间的蓝牙使用,发现网上相关的资料比较贫乏,不像其他 Android相关资料那么齐全,基本上大部分资料都是在蓝牙联盟SIG 提供的官网

https://www.bluetooth.com/zh-cn/specifications

上查找得到,也没有一个比较稳定好用的基础操作框架,开发时遇到的各种问题也是非常头疼。在此种情况下该框架应运而生,框架中包含了蓝牙设备的基础操作功能,调用简单,已通过实际项目进行验证,并且配有一个比较好用的 demo 演示,下文主要讲述该框架的使用方式。如果对于 Android BLE 还不是很了解,可以先看看我的这篇博文Android BLE 学习笔记,里面对于蓝牙的基础知识有详细的讲述。

BLE

Android BLE 基础操作框架,基于回调,操作简单。其中包含扫描、连接、广播包解析、服务读写及通知等功能。

项目地址:https://github.com/xiaoyaoyou1212/BLE

项目引入:compile 'com.vise.xiaoyaoyou:baseble:1.0.5'

设备扫描

使用简介

BluetoothLeDeviceStore中统一进行处理,使用方式如下:

f98118881cb935ce905d3ea62ead113e.png

第二种方式是扫描指定 Mac 地址的设备,一般需设置超时时间,扫描到指定设备后就停止扫描,使用方式如下:

184d27983ba5d49a001ca4e1ed0689c4.png

第三种方式是扫描指定广播名的设备,同第二种方式类似,也需设置超时时间,扫描到指定设备后也会停止扫描,使用方式如下:

18ac313242c7316c328c20ea553a6d40.png

其中扫描到的设备信息都统一放到BluetoothLeDevice 中,其中包含了设备的所有信息,以下会详细讲解具体包含哪些信息。

示例图

f6e725132b1b6407c168072ea873c9e5.png

设备连接

使用简介

连接与扫描一样也有三种方式,第一种方式是在扫描获取设备信息 BluetoothLeDevice 后才可使用,可设置连接超时时间,默认超时时间为10秒,使用方式如下:

1001ab50e1b60c5e662ee730f0de7fb6.png

第二种方式是连接指定 Mac 地址的设备,该方式使用前不需要进行扫描,该方式直接将扫描和连接放到一起,在扫描到指定设备后自动进行连接,使用方式如下:

3b89ae86e148f684682ffb8aa599e8b3.png

第三种方式是连接指定名称的设备,该方式与第二种方式类似,使用方式如下:

11bc31c088fe5e0ad0f492473b4ad675.png

连接成功后就可以进行相关处理,回调已在底层做了线程切换处理,可以直接操作视图。如果知道该设备服务的UUID,可直接调用ViseBluetooth.getInstance().withUUIDString(serviceUUID, characteristicUUID, deorUUID);,那么在下面操作设备时就不需要传特征(BluetoothGattCharacteristic) 和描述 (BluetoothGattDeor)相关参数,如果在连接成功后一直没设置 UUID,那么在操作时则需要传该参数,该内容在下文的设备操作中会详细讲解,此处就不一一讲解了。

示例图

49eb0c0ed469d424ac31c0307493e38d.png

设备详情

使用简介DEVICE INFO (设备信息)

获取设备名称(Device Name): bluetoothLeDevice.getName();

获取设备地址(Device Address): bluetoothLeDevice.getAddress();

获取设备类别(Device Class): bluetoothLeDevice.getBluetoothDeviceClassName();

获取主要设备类别(Major Class): bluetoothLeDevice.getBluetoothDeviceMajorClassName();

获取服务类别(Service Class): bluetoothLeDevice.getBluetoothDeviceKnownSupportedServices();

获取配对状态(Bonding State): bluetoothLeDevice.getBluetoothDeviceBondState();RSSI INFO (信号信息)

获取第一次信号时间戳(First Timestamp): bluetoothLeDevice.getFirstTimestamp();

获取第一次信号强度(First RSSI): bluetoothLeDevice.getFirstRssi();

获取最后一次信号时间戳(Last Timestamp): bluetoothLeDevice.getTimestamp();

获取最后一次信号强度(Last RSSI): bluetoothLeDevice.getRssi();

获取平均信号强度(Running Average RSSI): bluetoothLeDevice.getRunningAverageRssi();

SCAN RECORD INFO(广播信息)

根据扫描到的广播包 AdRecordStore 获取某个广播数据单元 AdRecord 的类型编号 record.getType(),再根据编号获取广播数据单元的类型描述 record.getHumanReadableType() 以及该广播数据单元的长度及数据内容,最后通过 AdRecordUtil.getRecordDataAsString(record) 将数据内容转换成具体字符串。

示例图

d5a4b2f4e6b3bc21fbae8a099e9578ea.png

2bbc32a786a1f52faec1212c3b3d1d53.png

设备操作

使用简介

在操作设备前首先要保证设备已连接成功,那么在设备连接成功获取到 BluetoothGatt 后直接对服务的特征值 UUID 进行相关处理,其中特征值 UUID 有可读、可写、可通知、指示器四种,获取过程如下所示:

9fd918075f8f62d2390d4f959787beec.png

在获取到 BluetoothGattCharacteristic 后可进行如下操作:

设置通知服务

75b7046629b9fc694592b42c7e21ddaa.png

其中最后一个参数是设置该通知是否是指示器方式,指示器方式为有应答的通知方式,在传输时更为靠谱。如果在连接成功时已经知道该设备可通知的 UUID 并且已经设置成功,那么此处还可以如下设置:

c5f485a57a0188f3edb156ae8b39648c.png

读取信息

ad92b126076e1843f8eb1553b73b1387.png

同上,如果已设置过可读的 UUID,那么此处也可以通过如下方式读取信息:

4c979fe8def9cab2d5e8fead3ab0b209.png

写入数据

82094e32f93c128f94679338ff3c1a86.png

同样,如果在连接成功时设置过可写 UUID,那么此处也可以通过如下方式写入数据:

86cbf7c5cbd815f7a13e74fc178bdaca.png

此处的数据 new byte[]{0x00,0x01,0x02} 为模拟数据,在使用时替换为真实数据即可,切记每次发送的数据必须在20个字节内,如果大于20字节可采用分包机制进行处理。

示例图

028ed8a00e71a936a42cbeedcbabb2e3.png

总结

从以上的描述中可以知道,设备相关的所有操作都统一交给 ViseBluetooth 进行处理,并且该类是单例模式,全局只有一个,管理很方便。使用前必须要在 Application 中调用 ViseBluetooth.getInstance().init(this); 进行初始化,在连接设备成功时会自动获得一个 BluetoothGatt,在断开连接时会将该 BluetoothGatt 关闭,上层不用关心连接数最大为6的限制问题,只需要在需要释放资源时调用 ViseBluetooth.getInstance().clear(); 就行,简单易用,这也正是该项目的宗旨。

感谢

在此要感谢两位作者提供的开源库

https://github.com/litesuits/android-lite-bluetoothLE

https://github.com/alt236/Bluetooth-LE-Library—Android

这两个开源库对于本项目的完成提供了很大的帮助。

更多

每天学习累了,看些搞笑的段子放松一下吧。关注最具娱乐精神的公众号,每天都有好心情。

如果你有好的技术文章想和大家分享,欢迎向我的公众号投稿,投稿具体细节请在公众号主页点击“投稿”菜单查看。返回搜狐,查看更多

责任编辑:

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值