SerialPort-4.0.+ 使用说明(Kotlin版本)
SerialPort-4.0.+
项目官网
Java版本使用说明
介绍
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实例
val serialPort = SerialPortBuilder
//是否打印调试信息
.isDebug(true)
//设置传统设备连接UUID(不设置则为以下默认值)
// .setLegacyUUID("00001101-0000-1000-8000-00805F9B34FB")
//设置BLE设备连接UUID(不设置则为以下默认值)
// .setBleUUID("0000ffe1-0000-1000-8000-00805f9b34fb")
//是否开启启动时自动重连
.autoConnect(false)
//是否开启间隔时间自动重连(间隔时间time不设置则默认为10000ms)
.setAutoReconnectAtIntervals(false, time = 10000)
//搜索结果是否忽略没有名字的设备
.isIgnoreNoNameDevice(true)
//发送数据时若未连接设备是否自动打开内置搜索页面
.autoOpenDiscoveryActivity(true)
//在接收数据格式为十六进制时,是否将其自动转换为字符串
.autoHexStringToString(false)
//设置接收数据格式(若不设置则默认为字符串)
// .setReadDataType(SerialPort.READ_STRING)
//设置发送数据格式(若不设置则默认为字符串)
// .setSendDataType(SerialPort.SEND_STRING)
//搜索状态监听(status 为搜索状态)
.setDiscoveryStatusCallback { status -><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> deviceType<span class="token punctuation">,</span> status <span class="token operator">-></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> status<span class="token punctuation">,</span> bluetoothDevice <span class="token operator">-></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> string <span class="token operator">-></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>
设置UUID
- 传统设备
SerialPort.setLegacyUUID("00001101-0000-1000-8000-00805F9B34FB")
- BLE设备
SerialPort.setBleUUID("0000ffe1-0000-1000-8000-00805f9b34fb")
BLE设备的UUID可以在连接后调用
serialPort.printPossibleBleUUID()
来查看一些可选值
搜索设备
//以下两种方案均可
serialPort.doDiscovery(this)
SerialPortBuilder.doDiscovery(this)
停止搜索
serialPort.cancelDiscovery(this)
搜索状态监听
//status 为搜索状态
serialPort.setDiscoveryStatusCallback{ status -> }
//搜索状态带类型的监听
//deviceType = SerialPort.DISCOVERY_BLE 搜索BLE设备
//deviceType = SerialPort.DISCOVERY_LEGACY 搜索传统类型
//status 为搜索状态
serialPort.setDiscoveryStatusWithTypeCallback { deviceType, status ->}
若多处设置了监听,仅最后一次设置的生效
获取搜索结果
serialPort.getPairedDevicesList() //获取已配对设备
serialPort.getUnPairedDevicesList() //获取未配对设备
上述方法在4.0.0开始被弃用,建议使用以下方法
serialPort.getPairedDevicesListBD() //获取已配对设备
serialPort.getUnPairedDevicesListBD() //获取未配对设备
连接设备
- 打开内部集成的搜索页面
serialPort.openDiscoveryActivity()
- 打开自定义的搜索页面
val intent = Intent(this,YourActivity::class.java)
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 ->
}
上述方法在4.0.0开始被弃用,建议使用以下方法
serialPort.setConnectionStatusCallback { status, bluetoothDevice ->
}
若多处设置了监听,仅最后一次设置的生效
设置接收数据格式
//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.sendData("hello")
若发送的数据为十六进制,则输入的数据需要为偶数个,只有一位的需要在其前面补0,且字母大写
例如:发送0x0a 0x0D
,需要写成serialPort.sendData("0A 0D")
接收消息监听
serialPort.setReceivedDataCallback { string ->
}
若多处设置了监听,仅最后一次设置的生效
十六进制字符串转换成字符串
val string = serialPort.hexStringToString(hexString)
此时的接收数据格式为十六进制
修改Toast提示
//是否显示
SerialPortToast.connectSucceeded.status = true
//提示内容
SerialPortToast.connectSucceeded.content = "连接成功"
//显示时长 Toast.LENGTH_SHORT 或 Toast.LENGTH_LONG
SerialPortToast.connectSucceeded.time = Toast.LENGTH_SHORT
项目 | 描述 | 默认值 |
---|---|---|
connectSucceeded | 连接成功时 | 连接成功 |
connectFailed | 连接失败时 | 连接失败 |
disconnect | 断开连接时 | 断开连接 |
connectFirst | 未连接设备时执行发送数据 | 请先连接设备 |
disconnectFirst | 已连接设备后执行连接操作 | 请先断开连接 |
permission | 询问是否开启定位权限 | 请先开启位置权限 |
hexTip | 发送十六进制时,数据格式不对提示 | 请输入的十六进制数据保持两位,不足前面补0 |
openBluetoothSucceeded | 打开蓝牙成功时 | 蓝牙打开成功 |
openBluetoothFailed | 打开蓝牙失败时 | 蓝牙打开失败 |
SerialPort-4.0.+ 使用说明(Kotlin版本)的更多相关文章
- SerialPort-4.0.+ 使用说明(Java版本)
SerialPort-4.0.+ 项目官网 Kotlin版本使用说明 介绍 SerialPort 是一个开源的对 Android 蓝牙串口通信的轻量封装库,轻松解决了构建自己的串口调试APP的复杂程度 ...
- Log4j 2.0 使用说明
原文地址:http://blog.csdn.net/welcome000yy/article/details/7962447 Log4j 2.0 使用说明(1) 之HelloWorld 最近刚接触 ...
- 中小研发团队架构实践之生产环境诊断工具WinDbg 三分钟学会.NET微服务之Polly 使用.Net Core+IView+Vue集成上传图片功能 Fiddler原理~知多少? ABP框架(asp.net core 2.X+Vue)模板项目学习之路(一) C#程序中设置全局代理(Global Proxy) WCF 4.0 使用说明 如何在IIS上发布,并能正常访问
中小研发团队架构实践之生产环境诊断工具WinDbg 生产环境偶尔会出现一些异常问题,WinDbg或GDB是解决此类问题的利器.调试工具WinDbg如同医生的听诊器,是系统生病时做问题诊断的逆向分析工具 ...
- 微信小程序0.11.122100版本新功能解析
微信小程序0.11.122100版本新功能解析 新版本就不再吐槽了,整的自己跟个愤青似的.人老了,喷不动了,把机会留给年轻人吧.下午随着新版本开放,微信居然破天荒的开放了开发者论坛.我很是担心官方 ...
- 完美解决AutoCAD2012,AutoCAD2013本身电脑里有NET4.0或以上版本却装不上的问题
适用情况:电脑里本身有NET4.0或4.5版本,并且正确安装.或本身你就装有AutoCAD2013或AutoCAD2012要装AutoCAD2012或AutoCAD2013却装不上的情况 如图1所示. ...
- 错误:Unsupported major.minor version 51.0(jdk版本错误)的解决方法
错误:Unsupported major.minor version 51.0(jdk版本错误)的解决方法 java.lang.UnsupportedClassVersionError: org/ap ...
- OpenGL2.0及以上版本中glm,glut,glew,glfw,mesa等部件的关系
OpenGL2.0及以上版本中gl,glut,glew,glfw,mesa等部件的关系 一.OpenGL OpenGL函数库相关的API有核心库(gl),实用库(glu),辅助库(aux).实用工具库 ...
- xcode7.3 升级 xcode8.0 后权限设置问题(升级xcode 8.0 后构建版本不显示问题)
xcode7.3 升级 xcode8.0 后权限设置问题(升级xcode 8.0 后构建版本不显示问题) 前两天为了适配 iOS10 的系统 我将xcode 7.3 升级到了 xcode 8.0 但是 ...
- android圆角View实现及不同版本这间的兼容(android3.0过后的版本)
http://blog.csdn.net/lovecluo/article/details/8710174 在做我们自己的APP的时候,为了让APP看起来更加的好看,我们就需要将我们的自己的View做 ...
- tomcat 6 不支持jsf2.2,仅支持jsf2.0及以下版本
tomcat 6 不支持jsf2.2,仅支持jsf2.0及以下版本 安装tomcat8即可.
随机推荐
- 西门子STEP7安装过程不断提示电脑重启的解决方法
win+R打开注册表 进入 计算机\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager 删除PendingFileR ...
- 程序语言与编程实践7-> Java实操4 | 第三周作业及思路讲解 | 异常处理考察
第三周作业,可能是异常那一章当时没怎么听,此前也不怎么接触,感觉还挺陌生的. 00 第1题 00-1 题目 /* * To change this license header, choose Lic ...
- volatile 变量和 atomic 变量有什么不同?
Volatile 变量可以确保先行关系,即写操作会发生在后续的读操作之前, 但它并不 能保证原子性.例如用 volatile 修饰 count 变量那么 count++ 操作就不是原子 性的. 而 A ...
- 如何在Linux Centos上部署配置FastDFS
一.准备工作: 1.准备下面包文件 -- FastDFS_v5.08.tar.gz -- libevent-2.0.22-stable.tar.gz -- libfastcommon-master.z ...
- docker-compose配置django web项目容器和EMQX容器
1.Dockerfile FROM gatewayserver_null:v1.1 ADD ./GatewayServer /code ADD ./entrypoint.sh /code# 给entr ...
- 描述一下 DispatcherServlet 的工作流程 ?
DispatcherServlet 的工作流程可以用一幅图来说明: 1.向服务器发送 HTTP 请求,请求被前端控制器 DispatcherServlet 捕获. 2. DispatcherServl ...
- Spring 由哪些模块组成?
以下是 Spring 框架的基本模块:第 393 页 共 485 页 Core module Bean module Context module Expression Language module ...
- springboot-数据访问之jdbc
官网的starthttps://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#using-boot-starter 111 ...
- Redis 回收进程如何工作的?
一个客户端运行了新的命令,添加了新的数据.Redi 检查内存使用情况,如 果大于 maxmemory 的限制, 则根据设定好的策略进行回收.一个新的命令被执 行,等等.所以我们不断地穿越内存限制的边界 ...
- HTML 5中的输出元素是什么?
当你需要计算两个输入的结果并将结果放到一个标签里的时候,就需要输出元素了.比如你有两个文本框(参见下图),你想要让这些文本框数字相加,然后输出给标签. 下面就是如何使用HTML 5代码输出元素. &l ...