SerialPort-4.0.+ 使用说明(Java版本)
SerialPort-4.0.+
项目官网
Kotlin版本使用说明
介绍
SerialPort 是一个开源的对 Android 蓝牙串口通信的轻量封装库,轻松解决了构建自己的串口调试APP的复杂程度,让人可以专注追求自己设计,不用考虑蓝牙串口底层的配置。
相较于3.0.+版本,4.0.+新增了对蓝牙4.0及以上设备的支持。具体更新内容见下文详细说明。
特性
- 兼容传统蓝牙与BLE蓝牙设备
- 内部集成搜索页面
- 自动重连上一次连接的设备
- 间隔时间自动重连
- Toast提示信息修改
QQ技术交流群
最新版本信息
- 4.1.0
- 修复内置搜索页面搜索到设备名为空的设备造成闪退的问题
- 修复连接设备成功后会报广播接收器没有被注册的问题
- 优化搜索结果的处理
- 内置搜索页面新增设备类型字段
- 内置搜索页面设备图标跟设备类型相匹配
- 新增附带搜索设备类型的搜索状态回调
- 新增通过设置地址自动区分设备连接函数
- 优化对蓝牙开关状态的处理
- 4.0.2
- 添加搜索状态回调,
setDiscoveryStatusCallback
- 接收回调函数名修改,由
setReceivedDataListener
变更为setReceivedDataCallback
- 添加搜索状态回调,
- 4.0.1
- 修复
setLegacyUUID
和setBleUUID
不能链式调用的问题
- 修复
- 4.0.0
- 新特性
- 支持蓝牙4.0以上设备
- 新增间隔自动重连
- 新增Toast提示内容修改
- 新增搜索页面忽视没有名字的设备
- 部分API过时,详情见下文
- 修复
- 打开内置搜索页面闪退
- 断开连接延时过长
- 未连接时发送数据自动打开内置搜索页面不稳定
- 发送十六进制 0A 时,自动变为 0A 0D
- 新特性
源码地址
Demo示例源码地址
使用说明
添加依赖
- 根目录下的
build.gradle
加入以下代码:
allprojects {
repositories {
//...
maven { url 'https://jitpack.io' }
}
}
- app模块的
build.gradle
加入以下代码即可:
dependencies {
//根据自身网络情况以下两个仓库二选一即可
implementation 'com.github.Shanyaliux:SerialPortSample:4.1.0' //国外仓库
implementation 'com.gitee.Shanya:SerialPortSample:4.1.0' //国内仓库
}
获取SerialPort实例
SerialPort serialPort = SerialPortBuilder.INSTANCE
//是否打印调试信息
.isDebug(true)
//设置传统设备连接UUID(不设置则为以下默认值)
// .setLegacyUUID("00001101-0000-1000-8000-00805F9B34FB")
//设置BLE设备连接UUID(不设置则为以下默认值)
// .setBleUUID("0000ffe1-0000-1000-8000-00805f9b34fb")
//是否开启启动时自动重连
.autoConnect(false)
//是否开启间隔时间自动重连(间隔时间time不设置则默认为10000ms)
.setAutoReconnectAtIntervals(false, 10000)
//搜索结果是否忽略没有名字的设备
.isIgnoreNoNameDevice(true)
//发送数据时若未连接设备是否自动打开内置搜索页面
.autoOpenDiscoveryActivity(true)
//在接收数据格式为十六进制时,是否将其自动转换为字符串
.autoHexStringToString(false)
//设置接收数据格式(若不设置则默认为字符串)
// .setReadDataType(SerialPort.READ_STRING)
//设置发送数据格式(若不设置则默认为字符串)
// .setSendDataType(SerialPort.SEND_STRING)
//搜索状态监听(status 为搜索状态)
.setDiscoveryStatusCallback((status) -> {<span class="token keyword">return</span> <span class="token keyword">null</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span><span class="token punctuation">)</span>
<span class="token comment">//搜索状态带类型的监听</span>
<span class="token comment">//deviceType = SerialPort.DISCOVERY_BLE 搜索BLE设备</span>
<span class="token comment">//deviceType = SerialPort.DISCOVERY_LEGACY 搜索传统类型</span>
<span class="token comment">//status 为搜索状态</span>
<span class="token punctuation">.</span><span class="token function">setDiscoveryStatusWithTypeCallback</span><span class="token punctuation">(</span><span class="token punctuation">(</span>deviceType<span class="token punctuation">,</span> status<span class="token punctuation">)</span> <span class="token operator">-></span> <span class="token punctuation">{<!-- --></span> <span class="token keyword">return</span> <span class="token keyword">null</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span><span class="token punctuation">)</span>
<span class="token comment">//连接状态监听(status 为连接状态,bluetoothDevice 为连接设备)</span>
<span class="token punctuation">.</span><span class="token function">setConnectionStatusCallback</span><span class="token punctuation">(</span><span class="token punctuation">(</span>status<span class="token punctuation">,</span>bluetoothDevice<span class="token punctuation">)</span> <span class="token operator">-></span><span class="token punctuation">{<!-- --></span> <span class="token keyword">return</span> <span class="token keyword">null</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span><span class="token punctuation">)</span>
<span class="token comment">//接收数据监听(string 为收到的数据)</span>
<span class="token punctuation">.</span><span class="token function">setReceivedDataListener</span><span class="token punctuation">(</span><span class="token punctuation">(</span>string<span class="token punctuation">)</span> <span class="token operator">-></span> <span class="token punctuation">{<!-- --></span> <span class="token keyword">return</span> <span class="token keyword">null</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span><span class="token punctuation">)</span>
<span class="token punctuation">.</span><span class="token function">build</span><span class="token punctuation">(</span><span class="token keyword">this</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
设置UUID
- 传统设备
SerialPort.Companion.setLegacyUUID("00001101-0000-1000-8000-00805F9B34FB");
- BLE设备
SerialPort.Companion.setBleUUID("0000ffe1-0000-1000-8000-00805f9b34fb");
BLE设备的UUID可以在连接后调用
serialPort.printPossibleBleUUID()
来查看一些可选值
搜索设备
//以下两种方案均可
serialPort.doDiscovery(this);
SerialPortBuilder.INSTANCE.doDiscovery(this);
停止搜索
serialPort.cancelDiscovery(this);
搜索状态监听
//status 为搜索状态
serialPort.setDiscoveryStatusCallback((status) ->{ return null;
});
//搜索状态带类型的监听
//deviceType = SerialPort.DISCOVERY_BLE 搜索BLE设备
//deviceType = SerialPort.DISCOVERY_LEGACY 搜索传统类型
//status 为搜索状态
serialPort.setDiscoveryStatusWithTypeCallback((deviceType, status) -> {return null;
});
若多处设置了监听,仅最后一次设置的生效
获取搜索结果
serialPort.getPairedDevicesList(); //获取已配对设备
serialPort.getUnPairedDevicesList(); //获取未配对设备
上述方法在4.0.0开始被弃用,建议使用以下方法
serialPort.getPairedDevicesListBD(); //获取已配对设备
serialPort.getUnPairedDevicesListBD(); //获取未配对设备
连接设备
- 打开内部集成的搜索页面
serialPort.openDiscoveryActivity();
- 打开自定义的搜索页面
Intent intent = new Intent(this, YourActivity.class);
serialPort.openDiscoveryActivity(intent);
- 通过设备地址连接
- 传统设备连接
serialPort.connectLegacyDevice("98:D3:32:21:67:D0");
- BLE设备连接
serialPort.connectBle("98:D3:32:21:67:D0");
断开连接
serialPort.disconnect()
连接状态监听
serialPort.setConnectStatusCallback((status,device)->{
<span class="token keyword">return</span> <span class="token keyword">null</span><span class="token punctuation">;</span>
});
上述方法在4.0.0开始被弃用,建议使用以下方法
serialPort.setConnectionStatusCallback((status,bluetoothDevice)->{
<span class="token keyword">return</span> <span class="token keyword">null</span><span class="token punctuation">;</span>
});
若多处设置了监听,仅最后一次设置的生效
设置接收数据格式
//SerialPort.READ_HEX 十六进制
//SerialPort.READ_STRING 字符串
//不设置则默认字符串形式
serialPort.setReadDataType(SerialPort.READ_HEX);
目前BLE设备暂不支持设置数据格式设置
设置发送数据格式
//SerialPort.SEND_HEX 十六进制
//SerialPort.SEND_STRING 字符串
//不设置则默认字符串形式
serialPort.setSendDataType(SerialPort.SEND_HEX);
目前BLE设备暂不支持设置数据格式设置
发送数据
//以下两种方案均可
serialPort.sendData("hello");
SerialPortBuilder.INSTANCE.sendData("hello");
若发送的数据为十六进制,则输入的数据需要为偶数个,只有一位的需要在其前面补0,且字母大写
例如:发送0x0a 0x0D
,需要写成serialPort.sendData("0A 0D")
接收消息监听
serialPort.setReceivedDataCallback((string) -> {
<span class="token keyword">return</span> <span class="token keyword">null</span><span class="token punctuation">;</span>
});
若多处设置了监听,仅最后一次设置的生效
十六进制字符串转换成字符串
String string = serialPort.hexStringToString(hexString);
此时的接收数据格式为十六进制
修改Toast提示
//是否显示
SerialPortToast.INSTANCE.getConnectSucceeded().setStatus(true);
//提示内容
SerialPortToast.INSTANCE.getConnectSucceeded().setContent("连接成功");
//显示时长 Toast.LENGTH_SHORT 或 Toast.LENGTH_LONG
SerialPortToast.INSTANCE.getConnectSucceeded().setTime(Toast.LENGTH_SHORT);
项目 | 描述 | 默认值 |
---|---|---|
connectSucceeded | 连接成功时 | 连接成功 |
connectFailed | 连接失败时 | 连接失败 |
disconnect | 断开连接时 | 断开连接 |
connectFirst | 未连接设备时执行发送数据 | 请先连接设备 |
disconnectFirst | 已连接设备后执行连接操作 | 请先断开连接 |
permission | 询问是否开启定位权限 | 请先开启位置权限 |
hexTip | 发送十六进制时,数据格式不对提示 | 请输入的十六进制数据保持两位,不足前面补0 |
openBluetoothSucceeded | 打开蓝牙成功时 | 蓝牙打开成功 |
openBluetoothFailed | 打开蓝牙失败时 | 蓝牙打开失败 |
SerialPort-4.0.+ 使用说明(Java版本)的更多相关文章
- SerialPort-4.0.+ 使用说明(Kotlin版本)
SerialPort-4.0.+ 项目官网 Java版本使用说明 介绍 SerialPort 是一个开源的对 Android 蓝牙串口通信的轻量封装库,轻松解决了构建自己的串口调试APP的复杂程度,让 ...
- linux ubuntu下如何安装并且切换java版本(Unsupported major.minor version 52.0)
最近在做一个dcos(数据中心操作系统)的东西,需要用marathon来做进程管理.遗憾的是0.6版本的marathon在API方面很是缺少,换成了0.15版本之后,运行时提示“Unsupported ...
- Java进阶(十二)JDK版本错误之Unsupported major.minor version 51.0(jdk版本错误)
错误:Unsupported major.minor version 51.0(jdk版本错误) 如果在win7下开发项目是使用的jdk版本和项目运行服务器jdk版本不同就会出现上面的问题. 用jdk ...
- Redis集群环境使用的是redis4.0.x的版本,在用java客户端jedisCluster启动集群做数据处理时报java.lang.NumberFormatException: For input string: "7003@17003"问题解决
java.lang.NumberFormatException: For input string: "7003@17003" at java.lang.NumberFormatE ...
- 复利计算5.0(改成Java版本)与 单元测试
//由于C语言版本不方便单元测试,所以改成了java版本,部分代码如下:import java.util.Scanner; public class FuLi{ public static void ...
- Log4j 2.0 使用说明
原文地址:http://blog.csdn.net/welcome000yy/article/details/7962447 Log4j 2.0 使用说明(1) 之HelloWorld 最近刚接触 ...
- R树判断点在多边形内-Java版本
1.什么是RTree 待补充 2.RTree java依赖 rtree的java开源版本在GitHub上:https://github.com/davidmoten/rtree 上面有详细的使用说明 ...
- Java版本:识别Json字符串并分隔成Map集合
前言: 最近又看了点Java的知识,于是想着把CYQ.Data V5迁移到Java版本. 过程发现坑很多,理论上看大部分很相似,实践上代码写起来发现大部分都要重新思考方案. 遇到的C#转Java的一些 ...
- 你的程序支持复杂的时间调度嘛?如约而来的 java 版本
你的程序支持复杂的时间调度嘛? 这篇文章介绍了时间适配器的c#版本,是给客户端用的,服务器自然也要有一套对应的做法,java版本的 [年][月][日][星期][时间] [*][*][*][*][*] ...
- 错误:Unsupported major.minor version 51.0(jdk版本错误)的解决方法
错误:Unsupported major.minor version 51.0(jdk版本错误)的解决方法 java.lang.UnsupportedClassVersionError: org/ap ...
随机推荐
- git 多人在同一分支上迭代开发时,如何保证分支提交历史保持线性
背景 最近我们组几个同事都投入到了一个新项目,互相之间的功能耦合比较紧密,因此,是打算从master上新拉一个分支,可以理解为我们几个人的开发分支,以develop代替. 一开始,我们是打算像svn那 ...
- 文档类型声明<!DOCTYPE html>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/ ...
- 【Java面试宝典】你们线上应用的 JVM 参数有哪些?
-server-Xms6000M-Xmx6000M-Xmn500M-XX:PermSize=500M-XX:MaxPermSize=500M-XX:SurvivorRatio=65536-XX:Max ...
- 什么是Spring Cloud Bus?
spring cloud bus 将分布式的节点用轻量的消息代理连接起来,它可以用于广播配置文件的更改或者服务直接的通讯,也可用于监控. 如果修改了配置文件,发送一次请求,所有的客户端便会重新读取配置 ...
- 什么是openssl?
在计算机网络上,OpenSSL是一个开放源代码的软件库包,应用程序可以使用这个包来进行安全通信,避免窃听,同时确认另一端连接者的身份.这个包广泛被应用在互联网的网页服务器上.
- python 函数基础知识
1.函数返回的多个值会被组织成元组被返回,也可以用多个值来接收 2.调用函数时候,传入的参数叫实际参数,简称实参,定义函数的参数叫做形式参数,简称形参-- 位置参数 def mymax(x,y): a ...
- mac终端所有命令不能用
最近一次在用终端敲命令的时候发现命令总是不执行(只有cd命令可以正常执行),返回命令未识别的错误-bash: source: command not found 相信很多朋友也会遇到类似的问题. 解决 ...
- Spring通知有哪些类型?
(1)前置通知(Before advice):在某连接点(join point)之前执行的通知,但这个通知不能阻止连接点前的执行(除非它抛出一个异常). (2)返回后通知(After returnin ...
- Spring源码分析笔记--事务管理
核心类 InfrastructureAdvisorAutoProxyCreator 本质是一个后置处理器,和AOP的后置处理器类似,但比AOP的使用级别低.当开启AOP代理模式后,优先使用AOP的后置 ...
- ElasticSearch-学习笔记01-docker安装
安装ElasticSearch docker 安装请参考: https://www.cnblogs.com/youxiu326/p/docker-01.html docker run -d --nam ...