Android 蓝牙串口通信工具类 SeriaPortUtil 2.0.+
原文地址:https://www.shanya.world/archives/2fd981ea.html
SerialPortUtil
提示
最新版本
3.0.+
已发布,其对比2.0.+
版本,API有了很大改动,且修复了很多bug,并带来一些新的特性,优化使用步骤。强烈建议切换至3.0.+
版本。
使用文档
3.0.+ 使用文档
源码仓库
GitHub仓库
Gitee仓库
介绍
SerialPortUtil 简介
SerialPort 是一个开源的对 Android 蓝牙串口通信的轻量封装库,轻松解决了构建自己的串口调试APP的复杂程度,让人可以专注追求自己设计,不用考虑蓝牙串口底层的配置。
- 集成搜索Activity,不用自己费力去实现
- 通过回调处理接收数据
- 异步处理发送
- 接收与发送均可使用十六进制和字符串
特性
内部集成的搜索页面
QQ技术交流群
最新版本 V2.0.3
新特性:
- 接收消息通过Service接收
- 新增连接状态时可获取设备名和地址
- 移除扫描状态获取
- 发送类型修改为字符类型时自动取消输入框的十六进制监听
修复:
- 连接状态监听的bug
- 接收消息时,内容有缺失的问题
- SearchActivity 权限申请弹窗被覆盖,导致没有获取权限
- SearchActivity 可用设备列表标题显示
- More than one file was found with OS independent path ‘META-INF/library_release.kotlin_module’
开源仓库地址
Github仓库
Demo例程源码
Java版本
下载地址
kotlin版本
下载地址
开始
安装
Gradle
根目录 build.gradle 加入以下代码:
allprojects {repositories {// 省略其代码...maven { url 'https://jitpack.io' }}
}
app模块的 build.gradle 加入以下代码即可:
dependencies {// 省略其代码...implementation 'com.github.Shanyaliux:SerialPortUtils:V2.0.3'
}
使用
Tips:
以下所有代码块,第一块是Java语法,第二块是Kotlin语法
获取 SerialPort 对象
SerialPort serialPort = SerialPort.Companion.getInstance(this);
val serialPort = SerialPort.getInstance(this)
以上代码创建了一个SerialPort
实例。
打开搜索页面
serialPort.openSearchPage();
serialPort.openSearchPage()
以上代码打开内部的搜索页面。该页面通过下拉操作进行搜索新设备。如下图所示:
搜索设备
serialPort.doDiscovery();
serialPort.doDiscovery()
以上代码执行搜索设备操作
获取已配对设备列表
ArrayList<Device> arrayList = serialPort.getPairedDevicesList();
val arrayList = serialPort.pairedDevicesList
以上代码获取已配对设备列表,其中Device
是一个数据类,包含已配对设备的名字和地址,以下代码说明如何从Device
获取信息
//获取设备名字
String name = device.name
//获取设备地址
String address = device.address
//获取设备名字
val name = device.name
//获取设备地址
val address = device.address
获取未配对设备列表
ArrayList<Device> arrayList = serialPort.getUnPairedDevicesList();
val arrayList = serialPort.unPairedDevicesList
获取连接状态
//其中device是已连接的设备信息(包含name和address)
serialPort.getConnectedStatus((aBoolean, device) -> {if (aBoolean) {//已连接} else {//未连接}return null;
});
serialPort.getConnectedStatus { status, device ->if (status) {//已连接} else {//未连接}}
以上代码就是获取连接状态
设置接收数据类型
可选参数(默认是 字符类型) | |
---|---|
SerialPort.READ_STRING | 字符类型 |
SerialPort.READ_HEX | 十六进制 |
serialPort.setReceivedDataType(SerialPort.READ_HEX);
serialPort.setReceivedDataType(SerialPort.READ_HEX)
以上代码将接收数据的类型切换为十六进制
设置发送数据类型
可选参数(默认是 字符类型) | |
---|---|
SerialPort.SEND_STRING | 字符类型 |
SerialPort.SEND_HEX | 十六进制 |
serialPort.setSendDataType(SerialPort.SEND_HEX);
serialPort.setSendDataType(SerialPort.SEND_HEX)
以上代码将发送数据的类型切换为十六进制
十六进制输入的监听
如果你要发送十六进制的数据类型,需要按一定的要求进行输入。
每一个十六进制需要保持两位,不足两位的需要在前面补0,中间间隔一个空格,比如:A8 0D
或者对输入框添加监听器进行自动限制输入
serialPort.setEditTextHexLimit(editTextSend);
serialPort.setEditTextHexLimit(editTextSend)
以上代码为名为editTextSend
的EditText
对象添加了十六进制监听器
发送数据
- 发送字符型
//从输入框发送
serialPort.sendData(editTextSend.getText().toString());
//代码发送
serialPort.sendData("Hello World!");
//从输入框发送
serialPort.sendData(editTextTextSend.text.toString()
//代码发送
serialPort.sendData("Hello World!")
- 发送十六进制
//从输入框发送
serialPort.sendData(editTextSend.getText().toString());
//代码发送 0xA5、0x0D
serialPort.sendData("A5 0D");
//从输入框发送
serialPort.sendData(editTextTextSend.text.toString()
//代码发送 0xA5、0x0D
serialPort.sendData("A5 0D")
接收数据
serialPort.getReceivedData(new Function1<String, Unit>() {@Overridepublic Unit invoke(String s) {// s 就是收到的数据return null;}
});
serialPort.getReceivedData{it// it 就是收到的数据
}
Android 蓝牙串口通信工具类 SeriaPortUtil 2.0.+相关推荐
- 关于Android蓝牙串口通信那点破事
Android蓝牙串口通讯 闲着无聊玩起了Android蓝牙模块与单片机蓝牙模块的通信,简单思路就是要手机通过蓝牙发送控制指令给单片机,并作简单的控制应用.单片机的蓝牙模块连接与程序暂且略过,此文主要 ...
- java 获取温度_Java利用RXTX串口通信工具类获取DS18B20温度传感器的温度值
环境:Windows10,Eclipse4.5.2,JDK1.7 设备:DS18B20温度传感器(4线,485接口),USB转485接口转换器,笔记本电脑 注意点:RTU传输,使用的是字节,那么在程序 ...
- android 蓝牙串口数据格式,Android 蓝牙串口调试程序开发
前言:本次项目需要为智能设备开发一个 App 于是就开始学习 Android 的蓝牙串口通信方面的知识,现在 App 已经写完了,当初学的时候走了不少弯路和尝试,现作为一名初学者和大家分享一下经验,以 ...
- Android蓝牙串口通讯【转】
本文转载自:http://blog.sina.com.cn/s/blog_631e3f2601012ixi.html Android蓝牙串口通讯 闲着无聊玩起了Android蓝牙模块与单片机蓝牙模块的 ...
- 谷歌Android开源串口通信使用
Demo下载地址: 谷歌官方串口库使用 引言: 现在的串口通信多用于嵌入设备中,Android主板与各种板卡之间的通信.因此串口通信在未来智能设备中应用会很广泛. 现在市面上几乎所有的Android串 ...
- 基于c#的串口设备通讯c#项目工程含虚拟串口软件与串口通信工具(C#源码)
利用pc与串口通讯,在工业领域使用的很多: 串口通信(Serial Communications)的概念非常简单,串口按位(bit)发送和接收字节.尽管比按字节(byte)的并行通信慢,但是串口可以在 ...
- Android蓝牙串口程序开发
本文主要介绍了针对android的蓝牙串口上位机开发. 程序下载地址:点击打开链接 一.帧定义 androidclient依照一定的数据帧格式通过蓝牙串口发送数据到连接到MCU的蓝牙从机.MCU接收到 ...
- wince下的蓝牙串口通信
wince下的蓝牙串口通信(上) wince下的蓝牙串口通信(下)--客户端
- android 字体像素转换工具类_Android中px与dip,sp与dip等的转换工具类
Android中px与dip,sp与dip等的转换工具类 功能 通常在代码中设置组件或文字大小只能用px,通过这个工具类我们可以把dip(dp)或sp为单位的值转换为以px为单位的值而保证大小不变.方 ...
最新文章
- python100行代码-python代码统计 100行
- QByteArray怎么转化为QString类型,并且在QLineEdit上面显示出来
- php并发访问mysql_php并发对MYSQL造成压力的解决方法_PHP
- find查找所有php,linux中的find命令—查找文件名
- 投巧解决JavaScript split方法出现空字符的问题
- codeforces:65
- Linux 设备驱动中的 I/O模型(二)—— 异步通知和异步I/O
- 实体和电商哪个更能赚到?
- 干货 | E-Prime实验数据处理之E-Merge妙招,确定不来看吗?
- 2022_天勤数据结构高分笔记_第二章_算法
- arduino i2c EEPROM(AT24C02、AT24C08、AT24C16、AT24C32、AT24C64)驱动
- VS2010中文版莫名的错误
- 自动注册appleid
- Unity中扫描二维码将电脑照片保存在手机中
- Android-第十三节04Room框架详解
- 【它山之玉】慎重选择博士后(或博士生)导师-科学网马臻
- Caché 函数大全
- android 图片占用内存的计算
- Mantis 管理Bug
- 如果期权买方真有这么好,为什么大户和机构都不做,而是散户在做!!!
热门文章
- matlab通信工具comm,matlab-通信工具箱教程.ppt
- [Android]解决小米手机神坑问题:Installation failed with message Failed to establish session
- VS简易示波器(二):自制子属性窗
- eclipse的maven项目中target目录m2e-wtp无法提交到SVN的处理办法
- 用多个Kinect体感摄像头实现真正360度运动捕捉系统
- springboot+flowable请假详细流程
- 小米8检查更新显示服务器连接失败,小米助手常见问题及解决方案
- window10 vmware centos8 搭建docker学习环境 部署spring web应用
- 数据结构:学生档案管理系统(C++版)
- AD6交互式布线,智能布线快捷键的介绍