建议使用4.+版本,避免一些不必要的bug。4.+版本文档地址:https://www.cnblogs.com/shanya/articles/16062256.html

SerialPortUtil 3.0.+

介绍

SerialPortUtil 简介

SerialPort 是一个开源的对 Android 蓝牙串口通信的轻量封装库,轻松解决了构建自己的串口调试APP的复杂程度,让人可以专注追求自己设计,不用考虑蓝牙串口底层的配置。

3.0.0 开始新增链式调用,更新大量API,并上传至Jcenter,让使用变得更加简单。

  • 集成搜索Activity,不用自己费力去实现
  • 通过回调处理接收数据
  • 异步处理发送
  • 接收与发送均可使用十六进制和字符串

特性

  • 内部集成的搜索页面
  • 自动重连上一次连接的设备
  • 可自行选择发送接收的数据格式

QQ技术交流群

最新版本 V3.0.0-beta3

  • V3.0.0-beta3 新特性

    1. 新增16进制字符串自动转换成普通字符串
    2. 新增可传入自定义搜索页面的功能
  • V3.0.0-beta0 新特性:

    1. 链式调用
    2. API更新,详情见下方使用说明
    3. 上传至Jcenter,优化引用
    4. 新增Debug模式
    5. 新增自动重连功能
    6. 删除对输入框的监听
    7. 支持 Android5.0 及以上
  • 修复:

    1. 修复多Activity跳转报错的问题
    2. 修复进入搜索页面返回后权限申请对话框不消失的问题

开源仓库地址

GitHub仓库

Gitee仓库

开始

安装

gradle

  • 添加JitPack 仓库到你的配置文件

    • 根目录下的 build.gradle加入以下代码:

      allprojects {
      repositories {
      //...
      maven { url 'https://jitpack.io' }
      }
      }
  • 添加依赖

    • app模块的 build.gradle 加入以下代码即可:

      • Github 仓库

        dependencies {
        implementation 'com.github.Shanyaliux:SerialPortSample:3.0.0-beta3'
        }
      • 国内仓库

        dependencies {
        implementation 'com.gitee.Shanya:SerialPortSample:3.0.0-beta3'
        }

使用

以下所有代码块,第一块是Kotlin,第二块是Java

快速上手

val serialPort = SerialPortBuilder
//是否开启Debug模式(Debug模式在Logcat打印一些信息,便于调试)
.isDebug(true)
//是否开启自动连接
.autoConnect(true)
//设置接收数据格式(SerialPort.READ_HEX 为十六进制,SerialPort.READ_STRING 为字符串)
.setReadDataType(SerialPort.READ_HEX)
//设置接收数据格式(SerialPort.SEND_HEX 为十六进制,SerialPort.SEND_STRING 为字符串)
.setSendDataType(SerialPort.SEND_HEX)
//设置接收 消息监听
.setReceivedDataListener {
Log.d("SerialPortDebug", "received: ${it}")
}
//设置连接状态监听 (status 为连接状态,device 为当前连接设备)
.setConnectStatusCallback { status, device ->
if (status) {
Log.d("SerialPortDebug", "连接: ${device.address}")
} else {
Log.d("SerialPortDebug", "断开")
}
}
//创建实例(需要传入上下文)
.build(this)
SerialPort serialPort = SerialPortBuilder.INSTANCE
//是否开启Debug模式(Debug模式在Logcat打印一些信息,便于调试)
.isDebug(true)
//是否开启自动连接
.autoConnect(true)
//设置接收数据格式(SerialPort.READ_HEX 为十六进制,SerialPort.READ_STRING 为字符串)
.setReadDataType(SerialPort.READ_HEX)
//设置接收数据格式(SerialPort.SEND_HEX 为十六进制,SerialPort.SEND_STRING 为字符串)
.setSendDataType(SerialPort.SEND_HEX)
//设置接收 消息监听
.setReceivedDataListener(new Function1<String, Unit>() {
@Override
public Unit invoke(String s) {
return null;
}
})
//设置连接状态监听 (status 为连接状态,device 为当前连接设备)
.setConnectStatusCallback(new Function2<Boolean, Device, Unit>() {
@Override
public Unit invoke(Boolean aBoolean, Device device) {
return null;
}
})
//创建实例(需要传入上下文)
.build(this);

以上仅是获取了 SerialPort 的实例,想要开始使用 SerialPort 请先连接设备。方法如下:

连接设备

  • 使用内部集成的搜索页面进行连接

    serialPort.openDiscoveryActivity()
    serialPort.openDiscoveryActivity();

    打开页面点击需要连接的设备即可

  • 自行使用设备地址进行连接

    serialPort.connectDevice("98:D3:32:21:67:D0")
    serialPort.connectDevice("98:D3:32:21:67:D0");

    自行使用设备地址连接的设备名称为空。

断开连接

serialPort.disconnect()
serialPort.disconnect();

设置接收数据格式

可选参数(默认是 字符类型)  
SerialPort.READ_STRING 字符类型
SerialPort.READ_HEX 十六进制
serialPort.setReadDataType(SerialPort.READ_HEX)
serialPort.setReadDataType(SerialPort.READ_HEX);

设置发送数据类型

可选参数(默认是 字符类型)  
SerialPort.SEND_STRING 字符类型
SerialPort.SEND_HEX 十六进制
serialPort.setSendDataType(SerialPort.SEND_HEX)
serialPort.setSendDataType(SerialPort.SEND_HEX);

发送数据

serialPort.sendData("hello")
serialPort.sendData("hello");

如果发送数据格式设置为16进制,输入的数据需要为偶数,只有一位的数据需要在前面补0。

例如:0x0A 需要写成 0A,serialPort.sendData("0A")

接收消息监听

serialPort.setReceivedDataListener { it
// it即为接收数据
Log.d("SerialPortDebug", "received: ${it}")
}
serialPort.setReceivedDataListener(new Function1<String, Unit>() {
@Override
public Unit invoke(String s) {
return null;
}
});

接收数据回调如果在多个地方调用,仅最后一个生效。

连接状态监听

serialPort.setConnectStatusCallback { status, device ->
if (status) {
Log.d("SerialPortDebug", "连接: ${device.address}")
} else {
Log.d("SerialPortDebug", "断开")
}
}
serialPort.setConnectStatusCallback(new Function2<Boolean, Device, Unit>() {
@Override
public Unit invoke(Boolean aBoolean, Device device) {
return null;
}
})

连接状态回调如果在多个地方调用,仅最后一个生效。

十六进制字符串转换成字符串

需使用 3.0.0-beta2 版本及以上

此时的接收数据格式为十六进制

  • 调用方法转换

    serialPort.hexStringToString(hexString)
    serialPort.hexStringToString(hexString);
  • 自动转换(初始化的时候打开标志位即可)

    val serialPort = SerialPortBuilder
    .autoHexStringToString(true)
    .build(this)
    SerialPort serialPort = SerialPortBuilder.INSTANCE
    .autoHexStringToString(true)
    .build(this);

自定义搜索页面

需使用 3.0.0-beta3 版本及以上

serialPort.openDiscoveryActivity(Intent(this,DiscoveryActivity::class.java))
serialPort.openDiscoveryActivity(new Intent(this, DiscoveryActivity.class));

搜索设备

需使用 3.0.0-beta3 版本及以上

serialPort.doDiscovery(this)
serialPort.doDiscovery(this);

Android 蓝牙串口通信工具类 SerialPortUtil 3.0.+的更多相关文章

  1. Android Studio 的蓝牙串口通信(附Demo源码下载)

    根据相关代码制作了一个开源依赖包,将以下所有的代码进行打包,直接调用即可完成所有的操作.详细说明地址如下,如果觉得有用可以GIthub点个Star支持一下: 项目官网 Kotlin版本说明文档 Jav ...

  2. BluetoothChat用于蓝牙串口通信的修改方法

    本人最近在研究嵌入式的串口通信,任务是要写一个手机端的遥控器用来遥控双轮平衡小车.界面只用了一个小时就写好了,重要的问题是如何与板子所带的SPP-CA蓝牙模块进行通信. SPP-CA模块自带代码,在这 ...

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

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

  4. Android开发调试日志工具类[支持保存到SD卡]

    直接上代码: package com.example.callstatus; import java.io.File; import java.io.FileWriter; import java.i ...

  5. Android开源项目大全 - 工具类

    主要包括那些不错的开发库,包括依赖注入框架.图片缓存.网络相关.数据库ORM建模.Android公共库.Android 高版本向低版本兼容.多媒体相关及其他. 一.依赖注入DI 通过依赖注入减少Vie ...

  6. wemall app商城源码android开发MD5加密工具类

    wemall-mobile是基于WeMall的android app商城,只需要在原商城目录下上传接口文件即可完成服务端的配置,客户端可定制修改.本文分享android开发MD5加密工具类主要代码,供 ...

  7. Android弹出Toast工具类总结

    Android弹出Toast工具类总结,包括系统自带的,也包括自定义的. public class ToastUtil { public ToastUtil() { } public static T ...

  8. Android 中替代 sharedpreferences 工具类的实现

    Android 中替代 sharedpreferences 工具类的实现 背景 想必大家一定用过 sharedpreferences 吧!就我个人而言,特别讨厌每次 put 完数据还要 commit. ...

  9. Https通信工具类

    记录一个在微信开发中用到的https通信工具类,以后会用到的. 用于https通信的证书信任管理器 import java.security.cert.CertificateException; im ...

随机推荐

  1. Rocket Mq 常用API 及简单运维

    RocketMQ 常用API 消息 消息消费模式 消息消费模式由消费者来决定,可以由消费者设置MessageModel来决定消息模式. 消息模式默认为集群消费模式 consumer.setMessag ...

  2. SIMOTION D435-2 PN报错1915,无法进入RUN状态 解决方法

    1.现象 2.解决方法 以下几种情况会导致SIMOTION D CPU无法RUN状态: 1.SIMOTION D设置CPU上电后自动进入RUN状态,上电后D4x5 CPU准备就绪,开始执行系统任务区的 ...

  3. Java并发编程虚假唤醒问题(生产者和消费者关系)

    何为虚假唤醒: 当一个条件满足时,很多线程都被唤醒了,但是只有其中部分是有用的唤醒,其它的唤醒都是无用功:比如买货:如果商品本来没有货物,突然进了一件商品,这是所有的线程都被唤醒了,但是只能一个人买, ...

  4. synchronized 与 lock锁的异同

    相同点: 二者都可以解决线程安全问题: 不同点: 1..Synchronized 是Java内置的关键字:Lock是一个Java类: 2.Synchronized 无法判断锁的状态:Lock可以判断是 ...

  5. jQuery--筛选【串联函数】

    串联函数简介 A.add(B) 将A和B组合成一个对象 A.children().andSelf() 将之前的对象添加到操作集合中 A.children().children().end() 回到最近 ...

  6. 提高scrapy爬取效率配置

    提高scrapy爬取效率配置 #增加并发: 默认scrapy开启的并发线程为32个,可以适当进行增加.在settings配置文件中修改CONCURRENT_REQUESTS = 100值为100,并发 ...

  7. 4.1 ROS元功能包

    4.1 ROS元功能包 场景:完成ROS中一个系统性的功能,可能涉及到多个功能包,比如实现了机器人导航模块,该模块下有地图.定位.路径规划...等不同的子级功能包.那么调用者安装该模块时,需要逐一的安 ...

  8. carsim输入输出变量

    来自:https://wenku.baidu.com/view/3405ded5443610661ed9ad51f01dc281e43a5673.html 输出量

  9. 使用Dropbox搭建静态网站详细教程

    DropBox是一款非常好用的免费网络文件同步工具,是Dropbox公司运行的在线存储服务,通过云计算实现因特网上的文件同步,用户可以存储并共享文件和文件夹.今天小z和大家分享一下如何使用dropbo ...

  10. zx-editor 移动端(HTML5)富文本编辑器,可与原生App混合(hybrid)开发

    ZxEditor 移动端HTML文档(富文本)编辑器,支持图文混排.引用.大标题.无序列表,字体颜色.加粗.斜体. 可用于独立web项目开发,也可以用于与原生App混合(hybrid)开发. 源码地址 ...