Android BLE设备蓝牙通信框架BluetoothKit,flutter中文网

BluetoothKit是一个解决Android蓝牙通信兼容性问题的框架,提供简单接口,管理连接、读写、通知。它还处理串行任务队列、连接管理、多进程支持及接口调用拦截,优化蓝牙开发体验。文章列举了蓝牙扫描和连接中的常见问题及其解决方案。
摘要由CSDN通过智能技术生成

一、统一解决Android蓝牙通信过程中的兼容性问题

二、提供尽可能简单易用的接口,屏蔽蓝牙通信中的技术细节,只开放连接,读写,通知等语义。

三、实现串行化任务队列,统一处理蓝牙通信中的失败以及超时,支持可配置的容错处理

四、统一管理连接句柄,避免句柄泄露

五、方便监控各设备连接状态,比如手机可同时连接的设备数有限,可以检测设备连接活跃度,在尽可能维持连接的情况下,将最不活跃的设备自动断开。

六、支持多进程APP架构下蓝牙连接的管理

七、支持拦截所有对蓝牙原生接口的调用

对于刚接触Android蓝牙开发的初学者来说,会经常遇到一些奇怪的坑,我也是一路走过来的,将我遇到的一些坑总结了一下,这些坑在这个项目中都修复了,所以大家不必再费时费力去重复踩一遍。这个项目目前正在不断更新,有什么更好的建议大家可以随时提出来。

蓝牙扫描相关的坑


一、startDiscovery在大多数手机上是可以同时发现经典蓝牙和Ble的,但是startDiscovery的回调无法返回Ble的广播,所以无法通过广播识别设备,且startDiscovery扫描Ble的效率比StartLeScan低很多。所以在实际应用中,还是StartDiscovery和StartLeScan分开扫,前者扫经典蓝牙,后者扫低功耗蓝牙。

二、startLeScan() 的时候,在onLeScan() 中不能做耗时操作,特别是周围的BLE设备多的时候,容易导致底层堵塞。如果有耗时操作请丢到子线程中去处理。

三、有的手机会过滤设备广播,一次扫描过程中只发一次request,如果没有收到response就再也收不到该设备广播回调了,解决的办法是多扫几次。

蓝牙连接相关的坑


一、对蓝牙设备的操作不能并行,只能串行,即每次都要在收到上一个操作的回调后才能继续下一个操作。但是断开连接例外,断开连接要马上closeGatt,不用等任务队列中的其他操作了。而且要给所有正在执行或者准备执行的任务都cancel。

二、有时候蓝牙协议栈出现异常可能收不到回调,所以我们要对每个操作做超时检查,否则后面的所有操作都被阻塞了。

三、对于超时的任务,最好closeGatt,下次重新连接的

  • 22
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值