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

源码地址

  • ​GitHub仓库
  • Gitee仓库

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 ->}//搜索状态带类型的监听//deviceType = SerialPort.DISCOVERY_BLE 搜索BLE设备//deviceType = SerialPort.DISCOVERY_LEGACY 搜索传统类型//status 为搜索状态.setDiscoveryStatusWithTypeCallback { deviceType, status ->}//连接状态监听(status 为连接状态,bluetoothDevice 为连接设备).setConnectionStatusCallback { status, bluetoothDevice ->}//接收数据监听(string 为收到的数据).setReceivedDataListener { string ->}.build(this)

设置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. 【错误记录】Android Studio 4.2.1 编译报错 ( Kotlin 版本推荐设置 1.5.0 )

    文章目录 一.报错信息 二.解决方案 一.报错信息 将 Android Studio 版本升级成最新的 4.2.14.2.14.2.1 版本 , 出现如下错误 ; Build file 'D:\pro ...

  2. 谷歌开源 Kotlin 版本 gRPC

    谷歌开源了 gRPC-Kotlin/JVM,让开发者可以在 Kotlin 项目中更方便地使用 gRPC,以更简单的方式构建可靠的网络连接服务. gRPC 是谷歌开源的高性能.通用 RPC 框架,支持多 ...

  3. 【Android】app应用内版本更新升级(DownloadManager下载,适配Android6.0以上所有版本)

    目录 前言 一.实现思路 二.服务端接口 三.UI页面 三.工具类实现 1.检查版本号 2.下载apk 3.安装apk 4.实时更新下载进度 5.完整代码 三.外部使用 总结 前言 版本的升级和更新是 ...

  4. Android Compose 版本与 Kotlin 版本的兼容问题

    文章目录 问题描述 解决问题 1. 找到 compose 与 kotlin 的[兼容性版本对照表](https://developer.android.google.cn/jetpack/androi ...

  5. cnPuTTY 0.78.0.1—PuTTY Release 0.78中文版本简单说明~~

    2022-10-29 官方正式发布 PuTTY 0.78 released 主要的更新内容有:新功能特性支持OpenSSH的证书系统:新形式的SSH jump host支持:恢复Windows XP支 ...

  6. protege连接mysql_Protege4.0使用说明+问题整理.doc

    Protege4.0使用说明 1 准备知识 OWL-Lite 它是OWL中句法最简单的一种子语言.对于简单的继承或者约束,它就显得非常适用.一般用于合并同类字典和简单继承.lite是清淡的意思 OWL ...

  7. 【Flutter】Flutter 拍照示例 ( 拍照并获取照片源码示例 | image_picker: ^0.5.2 版本 )

    文章目录 一.image_picker 使用 二.image_picker 使用示例 三.相关资源 一.image_picker 使用 在 image_picker 插件主页 有关于该 Flutter ...

  8. 如何修改MySQL8.0.5以上版本root密码

    2019独角兽企业重金招聘Python工程师标准>>> 如何修改MySQL8.0.5以上版本root密码 听语音 | 浏览:101 | 更新:2018-11-09 15:23 1 2 ...

  9. apache 版本_Apache Hudi 0.5.1版本重磅发布

    历经大约3个月时间,Apache Hudi 社区终于发布了0.5.1版本,这是Apache Hudi发布的第二个Apache版本,该版本中一些关键点如下 版本升级 将Spark版本从2.1.0升级到2 ...

  10. H3CNE新版本V6.0与旧版本V5.1的区别

    H3CNE新版本V6.0与旧版本V5.1的区别 华×××司于09年3月份推出了自己的新版NE培训教材V6.0版本,考试代号为GB0-190,考试价格也由原来的340元上涨到了1000元.通过分数线为6 ...

最新文章

  1. php 遍历所有的文件
  2. python glob 模块 map函数
  3. android录制视频横向,Android从零开始(26)(设置全屏+横屏、相机拍照、视频录制)(新)...
  4. mysql语法题_mysql数据库题语法练习
  5. Linux网络协议栈:网卡收包分析
  6. 成功激活windows server 2008 sp2!
  7. 《算法设计与分析》黄宇编著 课后习题参考答案
  8. 转载:C语言运算符优先级记忆口诀
  9. 2013年8个存储热点话题总结及高端存储发展趋势
  10. Window安装RabbitMQ并设置为开机启动
  11. Ubuntu 机箱前置耳机没声音的问题(彻底解决)
  12. ​关于百度网盘扩容的一点经验分享2022
  13. gluster容量显示处理
  14. 苗条的生成树_苗条手册
  15. 富勒x100滚轮无法调节音量怎么办?
  16. 什么是内存泄露?遇到内存泄露该怎么解决?
  17. 达人评测 麒麟9000、麒麟990e和苹果a15 哪个好
  18. 讲讲语言转换程序:将一种语言转换为另一种语言的程序
  19. 做一个小程序要多少钱?
  20. WPF 4 开发Windows 7 任务栏(Overlay Icon、Thumbnail Toolbar、Progress Bar)

热门文章

  1. Web Components 的使用,从入门到基础
  2. 爬取沪深股票并找出最近1个月创出新高的股票
  3. 怎么下载QQ空间或者知乎类似网站上面的视频文件
  4. 【愚公系列】2022年03月 .NET架构班 021-ABP vNext 动态代理模块
  5. 以前端的角度出发做好SEO需要考虑什么
  6. 邮箱POP3、SMTP和IMAP
  7. 第三方微信登录 | 静默授权与网页授权的实现
  8. Bootstrap-CL:标签
  9. NPDP新产品考试考后感想~
  10. 【论文阅读-句向量】Whitening Sentence Representations for Better Semantics and Faster Retrieval