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
    • 修复 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实例

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">-&gt;</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">-&gt;</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">-&gt;</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)
  • 通过设备地址连接
  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 ->
}

上述方法在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版本)的更多相关文章

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

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

  2. Log4j 2.0 使用说明

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

  3. 中小研发团队架构实践之生产环境诊断工具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如同医生的听诊器,是系统生病时做问题诊断的逆向分析工具 ...

  4. 微信小程序0.11.122100版本新功能解析

    微信小程序0.11.122100版本新功能解析   新版本就不再吐槽了,整的自己跟个愤青似的.人老了,喷不动了,把机会留给年轻人吧.下午随着新版本开放,微信居然破天荒的开放了开发者论坛.我很是担心官方 ...

  5. 完美解决AutoCAD2012,AutoCAD2013本身电脑里有NET4.0或以上版本却装不上的问题

    适用情况:电脑里本身有NET4.0或4.5版本,并且正确安装.或本身你就装有AutoCAD2013或AutoCAD2012要装AutoCAD2012或AutoCAD2013却装不上的情况 如图1所示. ...

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

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

  7. OpenGL2.0及以上版本中glm,glut,glew,glfw,mesa等部件的关系

    OpenGL2.0及以上版本中gl,glut,glew,glfw,mesa等部件的关系 一.OpenGL OpenGL函数库相关的API有核心库(gl),实用库(glu),辅助库(aux).实用工具库 ...

  8. xcode7.3 升级 xcode8.0 后权限设置问题(升级xcode 8.0 后构建版本不显示问题)

    xcode7.3 升级 xcode8.0 后权限设置问题(升级xcode 8.0 后构建版本不显示问题) 前两天为了适配 iOS10 的系统 我将xcode 7.3 升级到了 xcode 8.0 但是 ...

  9. android圆角View实现及不同版本这间的兼容(android3.0过后的版本)

    http://blog.csdn.net/lovecluo/article/details/8710174 在做我们自己的APP的时候,为了让APP看起来更加的好看,我们就需要将我们的自己的View做 ...

  10. tomcat 6 不支持jsf2.2,仅支持jsf2.0及以下版本

    tomcat 6 不支持jsf2.2,仅支持jsf2.0及以下版本 安装tomcat8即可.

随机推荐

  1. 【网鼎杯2020白虎组】Web WriteUp [picdown]

    picdown 抓包发现存在文件包含漏洞: 在main.py下面暴露的flask的源代码 from flask import Flask, Response, render_template, req ...

  2. innodb和myisam

    在Mysql数据库中,常用的引擎主要就是2个:Innodb和MyIASM.这篇文章将主要介绍这两个引擎,以及该如何去选择引擎,最后在提一下这2种引擎所使用的数据结构是什么. 首先介绍一下Innodb引 ...

  3. elasticsearch 的倒排索引是什么 ?

    解答:通俗解释一下就可以. 传统的我们的检索是通过文章,逐个遍历找到对应关键词的位置. 而倒排索引,是通过分词策略,形成了词和文章的映射关系表,这种词典+映射表 即为倒排索引. 有了倒排索引,就能实现 ...

  4. Spring Mvc 源代码之我见 一

    spring mvc 是一个web框架,包括controller.model.view 三大块.其中,核心在于model这个模块,用于处理请求的request. 和之前的博客一样,关键的代码,我会标注 ...

  5. 学习FastDfs(二)

    分布式文件系统(DFS) 指文件系统管理的物理存储资源不一定直接连接在本地节点上 而是通过计算机网络与节点相连 分布式文件系统的设计基于客户机/服务器模式 一个典型的网络可能包括多个多个用户访问的服务 ...

  6. 学习Kvm(二)

    一.走进云计算 云计算:云计算是一种按使用量付费的模式,这种模式提供可用的.便捷的.按需的网络访问, 进入可配置的计算资源共享池(资源包括网络,服务器,存储,应用软件,服务),这些资源能够被快速提供, ...

  7. vue3在组件上使用v-model

    v-model用于在元素上创建双向数据绑定,负责监听用户输入事件来更新数据. v-model应用于输入框 <input v-model="searchText" /> ...

  8. ROS环境变量的设置

    一.前言(大神可以直接跳过) 本博客主要就是为了介绍ROS中环境变量的设置过程,还不是很了解ROS的可以去看一下我的博客,ROS简介-从零开始讲解ROS(适合超零基础阅读) ROS为什么需要设置环境变 ...

  9. onsubmit阻止表单提交

    在实际开发中往往会遇到检查表单数据的合法性,如果数据不合法,就不让其提交. <!DOCTYPE html> <html> <head> <meta chars ...

  10. ES6-11学习笔记--字符串的扩展

    字符的Unicode表示法 字符串的遍历器接口 ****重点****模板字符串 String.fromCodePoint() String.prototype.includes() String.pr ...