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
    • 修复 setLegacyUUIDsetBleUUID 不能链式调用的问题
  • 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">-&gt;</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">-&gt;</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">-&gt;</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);
  • 通过设备地址连接
  1. 传统设备连接
serialPort.connectLegacyDevice("98:D3:32:21:67:D0");
  1. 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版本)的更多相关文章

  1. SerialPort-4.0.+ 使用说明(Kotlin版本)

    SerialPort-4.0.+ 项目官网 Java版本使用说明 介绍 SerialPort 是一个开源的对 Android 蓝牙串口通信的轻量封装库,轻松解决了构建自己的串口调试APP的复杂程度,让 ...

  2. linux ubuntu下如何安装并且切换java版本(Unsupported major.minor version 52.0)

    最近在做一个dcos(数据中心操作系统)的东西,需要用marathon来做进程管理.遗憾的是0.6版本的marathon在API方面很是缺少,换成了0.15版本之后,运行时提示“Unsupported ...

  3. Java进阶(十二)JDK版本错误之Unsupported major.minor version 51.0(jdk版本错误)

    错误:Unsupported major.minor version 51.0(jdk版本错误) 如果在win7下开发项目是使用的jdk版本和项目运行服务器jdk版本不同就会出现上面的问题. 用jdk ...

  4. 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. 复利计算5.0(改成Java版本)与 单元测试

    //由于C语言版本不方便单元测试,所以改成了java版本,部分代码如下:import java.util.Scanner; public class FuLi{ public static void ...

  6. Log4j 2.0 使用说明

      原文地址:http://blog.csdn.net/welcome000yy/article/details/7962447 Log4j 2.0 使用说明(1) 之HelloWorld 最近刚接触 ...

  7. R树判断点在多边形内-Java版本

    1.什么是RTree 待补充 2.RTree java依赖 rtree的java开源版本在GitHub上:https://github.com/davidmoten/rtree 上面有详细的使用说明 ...

  8. Java版本:识别Json字符串并分隔成Map集合

    前言: 最近又看了点Java的知识,于是想着把CYQ.Data V5迁移到Java版本. 过程发现坑很多,理论上看大部分很相似,实践上代码写起来发现大部分都要重新思考方案. 遇到的C#转Java的一些 ...

  9. 你的程序支持复杂的时间调度嘛?如约而来的 java 版本

    你的程序支持复杂的时间调度嘛? 这篇文章介绍了时间适配器的c#版本,是给客户端用的,服务器自然也要有一套对应的做法,java版本的 [年][月][日][星期][时间] [*][*][*][*][*] ...

  10. 错误:Unsupported major.minor version 51.0(jdk版本错误)的解决方法

    错误:Unsupported major.minor version 51.0(jdk版本错误)的解决方法 java.lang.UnsupportedClassVersionError: org/ap ...

随机推荐

  1. 如何运行MATLAB和C++混合编程

    在GitHub下载了一个大佬的滤波器程序,包含MATLAB和C++,刚开始直接运行,发现提示如下: 然后,第一步:点击截图访问后面的链接,跳转到如下截图: 第二步:点击上面截图的左下角,R2015b版 ...

  2. CF932G Palindrome Partition(回文自动机)

    CF932G Palindrome Partition(回文自动机) Luogu 题解时间 首先将字符串 $ s[1...n] $ 变成 $ s[1]s[n]s[2]s[n-1]... $ 就变成了求 ...

  3. Java中的异常处理机制的简单原理和应用?

    程序运行过程中可能出现各种"非预期"情况,这些非预期情况可能导致程序非正常结束. 为了提高程序的健壮性,Java提供了异常处理机制: try { s1... s2... s3... ...

  4. Postman请求报错:Error:getaddrinfo ENOENT 50.88.88.88

    一.问题来源 今天发布一个新开发的项目到通州现场,内容是开放几个接口给第三方调用,需要现场部署的同事使用postman调用测试一下,现场同事使用postman调用后反馈有如下错误: 二.解决方法 发现 ...

  5. 请解释Spring Bean的生命周期?

    首先说一下Servlet的生命周期:实例化,初始init,接收请求service,销毁destroy: Spring上下文中的Bean生命周期也类似,如下: (1)实例化Bean: 对于BeanFac ...

  6. @Param注解和@Mapper注解

    @Param 1.如果dao方法中只有一个参数,入参可以为#{0}或者#{任意单词},也可以使用@Param指定参数名称,sql中就只能#{指定名称}获取参数 public List<Regio ...

  7. Zookeeper Watcher 机制 -- 数据变更通知 ?

    Zookeeper 允许客户端向服务端的某个 Znode 注册一个 Watcher 监听,当服务 端的一些指定事件触发了这个 Watcher,服务端会向指定客户端发送一个事件通 知来实现分布式的通知功 ...

  8. 学习 Haproxy (一)

    haproxy是一个开源的.高性能的基于tcp和http应用代理的HA的.LB服务软件,它支持双机热备.HA.LB.虚拟主机.图形界面查看状态信息等功能,其配置简单.维护方便,而且后端RS的healt ...

  9. Logistic 回归模型的参数估计为什么不能采用最小二乘法?

    logistic回归模型的参数估计问题,是可以用最小二乘方法的思想进行求解的,但和经典的(或者说用在经典线性回归的参数估计问题)最小二乘法不同,是用的是"迭代重加权最小二乘法"(I ...

  10. 让我为你介绍一个神器:Chimee,一套可扩展的 H5 视频播放器解决方案

    Chimee(读"奇米", [tʃɪ'mɪ:])是由奇舞团开源的一套 H5 视频播放器解决方案,由奇舞团视频云前端团队结合在业务和视频编解码方向的沉淀积累倾心打造. Chimee ...