-
Notifications
You must be signed in to change notification settings - Fork 1.2k
Home
- 支持与外围BLE设备进行扫描、连接、读、写、通知订阅与取消等基本操作
- 支持获取信号强度、设置最大传输单元
- 支持自定义扫描规则
- 支持多设备连接
- 支持重连机制
- 支持配置超时机制
更多更详细的BLE相关开发经验可以从这里获取: Android BLE开发详解和FastBle源码解析
在支持BLE的Android手机上开发一个APP,通过这个APP去连接外围蓝牙设备,如小米手环,蓝牙耳机,蓝牙血压计,蓝牙门锁等。这个库可以方便地帮你实现一些基本BLE操作,而不需要去考虑蓝牙连接过程中系统发出的各种状态通知。
通常的流程是:
- 第一步,扫描周围已打开蓝牙的BLE设备。
- 第二步,扫描结束后在扫描的结果中选取一个符合条件的BLE设备,在APP扫描(BLE设备广播)的过程中,BLE设备会有以下几个属性用于辨别身份:蓝牙名、MAC、广播数据。
- 第三步,对选取的BLE设备进行连接。
- 第四步,连接成功后可以列出这个设备所包含的所有服务和特征,服务和特征是APP与设备进行交互的通道。
- 第五步,对指定的特征进行通知、读、写等操作。常用的操作是notify和wirte,前者是APP接收BLE发过来的数据,后者是APP向BLE设备发送数据。
- 第六步,APP与BLE设备断开连接。
其他流程中的一些技巧:
- 并不是每次都需要扫描设备后再进行连接,假如之前已经扫描到过这个设备,或者从其他方式已知你需要的设备的MAC,则可以将该设备对象或者其MAC保存起来,下次需要对其进行操作的时候,直接连接该设备,省去扫描的步骤,加快流程。
- 连接成功之后,如果已知你需要的服务和特征的UUID,可以直接对其进行操作,并不一定需要将设备的所有服务和特征列出来。
- APP与设备的连接与系统挂钩,不与APP的生命周期挂钩,假如你不主动调用
disconnect
或者destory
方法,当APP退出后,设备与APP依然会是连接状态。假如在APP或页面切换过程中,你丢失了原先的连接回调,可以再次对已连接的设备MAC进行connect,快速建立连接通知的桥梁。
如果遇到wirte或者notify失败的情况,建议在两次操作之间间隔一段时间。比如连接成功之后,间隔100ms再进行notify或wirte,具体时间数据可以在不同手机上尝试选择一个最短的有效时间。
只有在Android 4.3版本以上才可以使用BLE功能;在Android 6.0 以上使用扫描方法必须获取位置权限;某些型号手机还可能需要打开定位功能。
这个与BLE设备有关,针对不同的设备收到的回调时间不一样,建议在硬件端优化。
一般来说,每次write限制20个字节,如果超过了20个字节,需要进行分包发送。FastBle默认会对超过20字节的数据进行分包,发送的进度可以关注每一包数据发送的回调结果onWriteSuccess(int current, int total, byte[] justWrite)
。如果不需要分包,也可以选择关闭。
这个与BLE设备有关,建议在硬件端进行优化,尝试调整设备的连接参数(ConnectionInterval、SlaveLatency、 SupervisionTimeout),优化设置BLE连接过程中的传输速度和功耗。尤其是 SupervisionTimeout这个超时时间,如果BLE在这个时间内没有发生通信的话,就会自动断开。这些参数APP端无法修改。
如果你有技术方面问题与想法想与我沟通,可以通过下面的方式联系我。
QQ: 1033526540
Email: [email protected]
如果此框架对你帮助很大,并且你很想支持库的后续开发和维护,那么你可以扫描下方捐赠二维码支持我一下,我将不胜感激。