之前手里面有一个蓝牙项目,有连接多种蓝牙硬件设备和同时连接的需求,参考了下市面上的开源框架都没有特别好的覆盖项目里的问题(好多都是直接抄官方的demo),那就只能自己造轮子了。
PS:这个项目API和实现参考了BluetoothHelper这个开源项目。由于完全用kotlin重写并且有大量API和实现发生变动(详见下文),就单独造了个轮子。Thanks♪(・ω・)ノ
解决的痛点:
1.多设备同时连接的场景和跨UI使用蓝牙连接的场景
2.需要支持发送消息后等待(指定的)消息响应能力
3.支持自定义数据模型解析:大多数业务场景并不是操作字符串,或者直接操作字节流有点太麻烦了。举个例子:你可以抽象出命令实体来操作返回值,参考我们的网络接口数据模型
4.支持一些实战遇到的问题:延迟发送消息、消息队列、“粘包”处理
快速食用:
// 根据地址获取该设备的任务
val task = DefaultTask.obtainTask("66:66:66:66:66:66")
// or 标准获取任务的方式
val task = Beartooth.obtainTask("66:66:66:66:66:66", DefaultTask::class.java)
//注册回调(可省略
task.callback = this
// 发送字符串消息
task.sendMessage("Hello Beartooth!")
// 发送byte数组
task.sendMessage(byteArrayOf(0x1,0x2,0x3,0x4,0x5))
// 延迟(100ms)发送消息
task.sendMessage(SimpleMessage("Hello Beartooth!") + 100L)
其他的API可以参考项目中的readme,写的还比较详细
一些未实现的想法:
- 搜索附近设备相关API
- accept模式API
- 线程休眠阻塞时间性能优化
- 并发情况支持
- 协程API支持














网友评论