Android蓝牙通信框架 BluetoothKit

GPL
Java
Android
2016-08-30
dingjikerbo

BluetoothKit是一款功能强大的Android蓝牙通信框架,支持经典蓝牙和低功耗蓝牙设备混合扫描,提供了一系列简单易用的接口用于低功耗蓝牙设备的连接,数据读写,通知等。

特点

一、支持经典蓝牙和BLE蓝牙混合扫描,支持自定义扫描策略 
作为智能家居平台,接入的设备包括经典蓝牙和BLE,因此扫描设备时需要两者混合进行,而设备扫描场景不同,扫描策略也会不一样,因此需要支持扫描策略可配置。

二、充分解决了Android中BLE兼容性和稳定性问题 
Android系统对蓝牙4.0支持得并不完善,有许多bug, BluetoothKit很好地解决了其中大部分已知的问题。 

三、简单易用,接口简洁明了 
BluetoothKit采用异步串行化策略处理所有设备操作,并支持任务超时及出错重试。 

技术

一、实现了一个完整的跨进程异步任务队列,支持任务超时、出错重试及防御队列溢出

二、拦截并Hook系统层蓝牙Binder,实现对所有蓝牙设备通信的监控,当同时连接设备数过多时会自动断掉活跃度最低的设备

三、整个框架封装在一个service中,可灵活指定service所在进程。通过client与service通信,client可源于多个不同进程,因此适用于多进程架构的app

四、屏蔽了接口异步回调可能持有调用端Activity引用导致的内存泄露

五、利用动态代理自动将所有操作封闭在工作线程,所以整个框架无锁

使用

// 首先,需要按如下方式初始化BluetoothClient:
BluetoothClient mClient = BluetoothClient.getInstance(context);

// 扫描设备:支持经典蓝牙和BLE设备混合扫描,可自由定制扫描策略如下:
SearchRequest request = new SearchRequest.Builder()
        .searchBluetoothLeDevice(3000, 3)   
        .searchBluetoothClassicDevice(5000) 
        .searchBluetoothLeDevice(2000)
        .build();

mClient.search(request, new SearchResponse() {
    @Override
    public void onSearchStarted() {

    }

    @Override
    public void onDeviceFounded(SearchResult device) {

    }

    @Override
    public void onSearchStopped() {

    }

    @Override
    public void onSearchCanceled() {

    }
});

// 停止蓝牙扫描
mClient.stopSearch();

// BLE设备连接
mClient.connect(MAC, new BleConnectResponse() {
    @Override
    public void onResponse(int code, Bundle data) {
        if (code == REQUEST_SUCCESS) {

        }
    }
});

// BLE设备断开连接
mClient.disconnect(MAC);

// 读取BLE设备
mClient.read(MAC, serviceUUID, characterUUID, new BleReadResponse() {
    @Override
    public void onResponse(int code, byte[] data) {
        if (code == REQUEST_SUCCESS) {

        }
    }
});

// 写BLE设备
mClient.write(MAC, serviceUUID, characterUUID, bytes, new BleWriteResponse() {
    @Override
    public void onResponse(int code) {
        if (code == REQUEST_SUCCESS) {

        }
    }
});

// 打开设备通知
mClient.notify(MAC, serviceUUID, characterUUID, new BleNotifyResponse() {
    @Override
    public void onNotify(UUID service, UUID character, byte[] value) {

    }

    @Override
    public void onResponse(int code) {
        if (code == REQUEST_SUCCESS) {

        }
    }
});

// 关闭设备通知
mClient.unnotify(MAC, serviceUUID, characterUUID, new BleUnnotifyResponse() {
    @Override
    public void onResponse(int code) {
        if (code == REQUEST_SUCCESS) {

        }
    }
});

// 读取rssi
mClient.readRssi(MAC, new BleReadRssiResponse() {
    @Override
    public void onResponse(int code, Integer rssi) {
        if (code == REQUEST_SUCCESS) {

        }
    }
});
加载中

评论(4)

K
Keying
好东西啊!感动的我热泪盈眶!
惜海
惜海
下载下来学习一下,谢谢!
RealMatrix
RealMatrix
你这个东西早点出来就好咯
D
Dxinc
很棒

暂无资讯

暂无问答

Android蓝牙开源框架BluetoothKit

BluetoothKit是一款功能强大的Android蓝牙通信框架,支持经典蓝牙和低功耗蓝牙设备混合扫描,提供了一系列简单易用的接口用于低功耗蓝牙设备的连接,数据读写,通知等。 项目地址: [https:/...

2016/08/30 19:27
961
0
fir.im Weekly - 做一款 App 需要考虑什么

开发 App 是一个痛并快乐的旅程。工具越来越多,成本也越来越低,那么在开发之前需要考虑些什么?[limboy](https://twitter.com/lzyy) 总结了一些经验和反思——[做一个 App 前需要考虑的几件...

2016/09/05 11:53
20
0
Android中BLE存在的各种坑

- 对蓝牙设备的操作不能并行,只能串行,并且每次都要在收到上一个操作的回调后才能继续下一个操作。有时候蓝牙协议栈出现异常可能收不到回调,所以我们要对每个操作做超时检查,否则后面的所...

2016/08/30 19:34
972
0
Swift 开源精选-v1.0(基础篇)

Swift 开源项目

2016/03/07 20:13
92
1
收集iOS开发框架

入门 Road Map iOS- 开发 iOS 应用从今天开始,苹果指南。★ Lifehacker- 我想写一个 iOS 应用,该从哪里开始? Codeproject- 入门 iPhone 和 iOS 应用开发。 Ray Wenderlich- 学习 iOS 应用...

2016/09/20 17:09
471
0
[转] iOS中文版资源库,非常全

iOS学习 iOS资源库 iOS工具 iOS大全

2016/03/20 15:19
940
1
[转]iOS中文版资源库,非常全

目录[-] Swift 语言写成的项目会被标记为 ★ ,AppleWatch 的项目则会被标记为 ▲。 目录 入门 库和框架 音频 动画 Apple TV 桥接 缓存 图表 Core Data 数据库 加密 硬件 动作 蓝牙 位置 iB...

2016/03/20 15:47
290
3

没有更多内容

加载失败,请刷新页面

没有更多内容

返回顶部
顶部