BluetoothKit

Android 蓝牙通信框架
授权协议 Apache
开发语言 Java
所属分类 手机/移动开发、 手机开发包
软件类型 开源软件
地区 国产
投 递 者 鲜于雨石
操作系统 Android
开源组织
适用人群 未知
 软件概览

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

特点

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

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

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

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

五、方便监控各设备连接状态,在尽可能维持连接的情况下,将最不活跃的设备自动断开。

六、便于多进程APP架构下蓝牙连接的统一管理

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

技术

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

二、拦截并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) {

        }
    }
});
  • BluetoothKit 详细介绍 BluetoothKit是一款功能强大的Android蓝牙通信框架,支持经典蓝牙和低功耗蓝牙设备混合扫描,提供了一系列简单易用的接口用于低功耗蓝牙设备的连接,数据读写,通知等。 特点 一、支持经典蓝牙和BLE蓝牙混合扫描,支持自定义扫描策略 作为智能家居平台,接入的设备包括经典蓝牙和BLE,因此扫描设备时需要两者混合进行,而设备扫描场景不同,扫描策略也会不一样,

  • BluetoothKit是一款功能强大的Android蓝牙通信框架,支持低功耗蓝牙设备的连接通信、蓝牙广播扫描及Beacon解析。 关于该项目的详细文档请关注:https://github.com/dingjikerbo/BluetoothKit 该项目的源码解析可参考视频 —— Android BLE蓝牙通信教程 这套框架存在的意义 一、统一解决Android蓝牙通信过程中的兼容性问题 二、提供

  • 同问。 蓝牙关闭重新打开,在蓝牙状态监听方法中添加【开启则1秒钟后设备重连】,出现连接失败;如果只断开设备,重连则连接成功,请问是什么原因,如何解决呢? 02-12 18:59:04.029 15776-15776/com.example.app V/miio-bluetooth: BluetoothReceiver onReceive: android.bluetooth.adapter.act

  • BluetoothKit是一款功能强大的Android蓝牙通信框架,支持经典蓝牙和低功耗蓝牙设备混合扫描,提供了一系列简单易用的接口用于低功耗蓝牙设备的连接,数据读写,通知等。​ 项目地址: https://github.com/dingjikerbo/BluetoothKit 特点 一、支持经典蓝牙和BLE蓝牙混合扫描,支持自定义扫描策略 作为智能家居平台,接入的设备包括经典蓝牙和BLE,因此扫

  • 前言 第一次做蓝牙开发,刚开始是懵逼的,花了2-3天可以实现功能了,连接血糖仪血压仪胰岛素泵并发送接收数据,用到了BluetoothKit。能力有限,错误之处还望指出。 首先需要知道的两点,1不需要配对也可以连接成功后直接发送数据(代码中无感) 2可以同时存在多个连接 大体流程:打开蓝牙-搜索蓝牙设备-连接某个蓝牙设备-读写数据 封装 public class BleManager { priva

  • BLE单次写的数据量大小是有限制的,通常是20字节,可以尝试通过requestMTU增大,但不保证能成功。分包写是一种解决方案,需要定义分包协议,假设每个包大小20字节,分两种包,数据包和非数据包。对于数据包,头两个字节表示包的序号,剩下的都填充数据。对于非数据包,主要是发送一些控制信息。 总体流程如下: 1、发端发送控制包,告诉对方要发送的总的包数 2、收端回一个ACK包,表示准备好了,对方可以

 相关资料
  • 我想知道android蓝牙通信的通信方式是什么。我的代码基本上遵循这里的开发者指南:http://developer.android.com/guide/topics/connectivity/bluetooth.html如果我按照本指南从设备中读取/写入数据?通信类型是什么?我在网上搜索了一下,它看起来像是串口通信,RS 232。这是正确的吗? 非常感谢。

  • 本文向大家介绍蓝牙框架结构,包括了蓝牙框架结构的使用技巧和注意事项,需要的朋友参考一下 蓝牙网络技术使用近距离的短波,超高频(UHF)无线电波无线连接移动设备,以形成个人局域网(PAN)。数据在蓝牙设备之间作为数据帧进行传输。定义了两种基本帧格式,用于以基本数据速率传输数据和用于以增强数据速率传输数据。 具有基本数据速率的蓝牙帧格式 具有基本速率的蓝牙帧包含三个部分,访问代码,标头和数据,如下图所

  • 需要发送16字节的ArrayBuffer,那么,比如说06 01 01 01 01...等等,是像我那样用十六进制定义每一位么?

  • 我制作了一个android应用程序来扫描蓝牙设备,并向我的服务器发送一个HTTP请求,这样我就可以检测它们是开着还是关着。我已经用我的带有蓝牙适配器的台式电脑测试过了,效果很好。当检测到电脑上的蓝牙功能时,它显示电脑是打开的,当我关闭电脑上的蓝牙功能时,它是关闭的。现在,我需要使用这个应用程序的设备有:雅伯投影仪、Bose SoundLink和JBL耳机,但我遇到了一些问题。 首先,投影仪似乎无法

  • 这让我困惑了好几天。 在开始时,当我实现的功能,我使用GATT配置文件BLE蓝牙通信。 然后我想到了蓝牙插座。这将SPP配置文件用于蓝牙通信。 其中提到: 最常见的蓝牙套接字类型是RFCOMM,这是Android API支持的类型。RFCOMM是一种面向连接的蓝牙流式传输。它也称为串行端口配置文件(SPP)。 我的要求是- 1)使用BLE蓝牙扫描并将我的android设备与黑匣子连接。 2) 然后

  • jd.closeBluetoothAdapter(Object object) 关闭蓝牙模块。调用该方法将断开所有已建立的连接并释放系统资源。建议在使用蓝牙流程后,与 jd.openBluetoothAdapter 成对调用。 参数 Object object 属性 类型 默认值 必填 说明 success function 否 接口调用成功的回调函数 fail function 否 接口调用失败

  • 蓝牙模块能够使你的作品与 Makeblock 蓝牙适配器 或支持蓝牙4.0的设备建立无线连接,使你能够无线地控制你的作品。 蓝牙的连接设置参看:通过蓝牙连接设备 蓝牙的灯效及含义 闪烁:蓝牙未被连接 常亮:蓝牙已连接,工作正常 灭:断电或故障 参数 尺寸:24×24mm 推荐使用距离:10m以内 蓝牙版本:BT4.0 频带范围:2402~2480MHz 天线增益:1.5dBi 能耗等级:≤4dBm

  • 蓝牙模块能够使你的作品与 Makeblock 蓝牙适配器 或支持蓝牙4.0的设备建立无线连接,使你能够无线地控制你的作品。 蓝牙的连接设置参看:通过蓝牙连接设备 蓝牙的灯效及含义 闪烁:蓝牙未被连接 常亮:蓝牙已连接,工作正常 灭:断电或故障 参数 尺寸:24×24mm 推荐使用距离:10m以内 蓝牙版本:BT4.0 频带范围:2402~2480MHz 天线增益:1.5dBi 能耗等级:≤4dBm