Skip to content
Lijian edited this page May 20, 2018 · 5 revisions

效果图

功能简介

  • 支持与外围BLE设备进行扫描、连接、读、写、通知订阅与取消等基本操作
  • 支持获取信号强度、设置最大传输单元
  • 支持自定义扫描规则
  • 支持多设备连接
  • 支持重连机制
  • 支持配置超时机制

经验分享

更多更详细的BLE相关开发经验可以从这里获取: Android BLE开发详解和FastBle源码解析

Q&A

1. 这个库可以用在哪些开发场景

在支持BLE的Android手机上开发一个APP,通过这个APP去连接外围蓝牙设备,如小米手环,蓝牙耳机,蓝牙血压计,蓝牙门锁等。这个库可以方便地帮你实现一些基本BLE操作,而不需要去考虑蓝牙连接过程中系统发出的各种状态通知。

2. BLE的基本操作流程

通常的流程是:

  • 第一步,扫描周围已打开蓝牙的BLE设备。
  • 第二步,扫描结束后在扫描的结果中选取一个符合条件的BLE设备,在APP扫描(BLE设备广播)的过程中,BLE设备会有以下几个属性用于辨别身份:蓝牙名、MAC、广播数据。
  • 第三步,对选取的BLE设备进行连接。
  • 第四步,连接成功后可以列出这个设备所包含的所有服务和特征,服务和特征是APP与设备进行交互的通道。
  • 第五步,对指定的特征进行通知、读、写等操作。常用的操作是notify和wirte,前者是APP接收BLE发过来的数据,后者是APP向BLE设备发送数据。
  • 第六步,APP与BLE设备断开连接。

其他流程中的一些技巧:

  1. 并不是每次都需要扫描设备后再进行连接,假如之前已经扫描到过这个设备,或者从其他方式已知你需要的设备的MAC,则可以将该设备对象或者其MAC保存起来,下次需要对其进行操作的时候,直接连接该设备,省去扫描的步骤,加快流程。
  2. 连接成功之后,如果已知你需要的服务和特征的UUID,可以直接对其进行操作,并不一定需要将设备的所有服务和特征列出来。
  3. APP与设备的连接与系统挂钩,不与APP的生命周期挂钩,假如你不主动调用disconnect或者destory方法,当APP退出后,设备与APP依然会是连接状态。假如在APP或页面切换过程中,你丢失了原先的连接回调,可以再次对已连接的设备MAC进行connect,快速建立连接通知的桥梁。

3. BLE操作中需要注意什么

如果遇到wirte或者notify失败的情况,建议在两次操作之间间隔一段时间。比如连接成功之后,间隔100ms再进行notify或wirte,具体时间数据可以在不同手机上尝试选择一个最短的有效时间。

4. BLE在不同的Android系统的区别

只有在Android 4.3版本以上才可以使用BLE功能;在Android 6.0 以上使用扫描方法必须获取位置权限;某些型号手机还可能需要打开定位功能。

5. 设备主动断开连接(如关机)后,隔了很久才收到onDisconnect回调

这个与BLE设备有关,针对不同的设备收到的回调时间不一样,建议在硬件端优化。

6. 什么情况下要分包

一般来说,每次write限制20个字节,如果超过了20个字节,需要进行分包发送。FastBle默认会对超过20字节的数据进行分包,发送的进度可以关注每一包数据发送的回调结果onWriteSuccess(int current, int total, byte[] justWrite)。如果不需要分包,也可以选择关闭。

7. 连接成功后马上断开连接

这个与BLE设备有关,建议在硬件端进行优化,尝试调整设备的连接参数(ConnectionInterval、SlaveLatency、 SupervisionTimeout),优化设置BLE连接过程中的传输速度和功耗。尤其是 SupervisionTimeout这个超时时间,如果BLE在这个时间内没有发生通信的话,就会自动断开。这些参数APP端无法修改。