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