原文地址: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

  • 新特性:

    1. 接收消息通过Service接收
    2. 新增连接状态时可获取设备名和地址
    3. 移除扫描状态获取
    4. 发送类型修改为字符类型时自动取消输入框的十六进制监听
  • 修复:

    1. 连接状态监听的bug
    2. 接收消息时,内容有缺失的问题
    3. SearchActivity 权限申请弹窗被覆盖,导致没有获取权限
    4. SearchActivity 可用设备列表标题显示
    5. 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)

以上代码为名为editTextSendEditText对象添加了十六进制监听器

发送数据

  • 发送字符型
//从输入框发送
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.+相关推荐

  1. 关于Android蓝牙串口通信那点破事

    Android蓝牙串口通讯 闲着无聊玩起了Android蓝牙模块与单片机蓝牙模块的通信,简单思路就是要手机通过蓝牙发送控制指令给单片机,并作简单的控制应用.单片机的蓝牙模块连接与程序暂且略过,此文主要 ...

  2. java 获取温度_Java利用RXTX串口通信工具类获取DS18B20温度传感器的温度值

    环境:Windows10,Eclipse4.5.2,JDK1.7 设备:DS18B20温度传感器(4线,485接口),USB转485接口转换器,笔记本电脑 注意点:RTU传输,使用的是字节,那么在程序 ...

  3. android 蓝牙串口数据格式,Android 蓝牙串口调试程序开发

    前言:本次项目需要为智能设备开发一个 App 于是就开始学习 Android 的蓝牙串口通信方面的知识,现在 App 已经写完了,当初学的时候走了不少弯路和尝试,现作为一名初学者和大家分享一下经验,以 ...

  4. Android蓝牙串口通讯【转】

    本文转载自:http://blog.sina.com.cn/s/blog_631e3f2601012ixi.html Android蓝牙串口通讯 闲着无聊玩起了Android蓝牙模块与单片机蓝牙模块的 ...

  5. 谷歌Android开源串口通信使用

    Demo下载地址: 谷歌官方串口库使用 引言: 现在的串口通信多用于嵌入设备中,Android主板与各种板卡之间的通信.因此串口通信在未来智能设备中应用会很广泛. 现在市面上几乎所有的Android串 ...

  6. 基于c#的串口设备通讯c#项目工程含虚拟串口软件与串口通信工具(C#源码)

    利用pc与串口通讯,在工业领域使用的很多: 串口通信(Serial Communications)的概念非常简单,串口按位(bit)发送和接收字节.尽管比按字节(byte)的并行通信慢,但是串口可以在 ...

  7. Android蓝牙串口程序开发

    本文主要介绍了针对android的蓝牙串口上位机开发. 程序下载地址:点击打开链接 一.帧定义 androidclient依照一定的数据帧格式通过蓝牙串口发送数据到连接到MCU的蓝牙从机.MCU接收到 ...

  8. wince下的蓝牙串口通信

    wince下的蓝牙串口通信(上) wince下的蓝牙串口通信(下)--客户端

  9. android 字体像素转换工具类_Android中px与dip,sp与dip等的转换工具类

    Android中px与dip,sp与dip等的转换工具类 功能 通常在代码中设置组件或文字大小只能用px,通过这个工具类我们可以把dip(dp)或sp为单位的值转换为以px为单位的值而保证大小不变.方 ...

最新文章

  1. python100行代码-python代码统计 100行
  2. QByteArray怎么转化为QString类型,并且在QLineEdit上面显示出来
  3. php并发访问mysql_php并发对MYSQL造成压力的解决方法_PHP
  4. find查找所有php,linux中的find命令—查找文件名
  5. 投巧解决JavaScript split方法出现空字符的问题
  6. codeforces:65
  7. Linux 设备驱动中的 I/O模型(二)—— 异步通知和异步I/O
  8. 实体和电商哪个更能赚到?
  9. 干货 | E-Prime实验数据处理之E-Merge妙招,确定不来看吗?
  10. 2022_天勤数据结构高分笔记_第二章_算法
  11. arduino i2c EEPROM(AT24C02、AT24C08、AT24C16、AT24C32、AT24C64)驱动
  12. VS2010中文版莫名的错误
  13. 自动注册appleid
  14. Unity中扫描二维码将电脑照片保存在手机中
  15. Android-第十三节04Room框架详解
  16. 【它山之玉】慎重选择博士后(或博士生)导师-科学网马臻
  17. Caché 函数大全
  18. android 图片占用内存的计算
  19. Mantis 管理Bug
  20. 如果期权买方真有这么好,为什么大户和机构都不做,而是散户在做!!!

热门文章

  1. matlab通信工具comm,matlab-通信工具箱教程.ppt
  2. [Android]解决小米手机神坑问题:Installation failed with message Failed to establish session
  3. VS简易示波器(二):自制子属性窗
  4. eclipse的maven项目中target目录m2e-wtp无法提交到SVN的处理办法
  5. 用多个Kinect体感摄像头实现真正360度运动捕捉系统
  6. springboot+flowable请假详细流程
  7. 小米8检查更新显示服务器连接失败,小米助手常见问题及解决方案
  8. window10 vmware centos8 搭建docker学习环境 部署spring web应用
  9. 数据结构:学生档案管理系统(C++版)
  10. AD6交互式布线,智能布线快捷键的介绍