SerialPortUtil 3.0.+

介绍

SerialPortUtil 简介

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

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

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

特性

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

QQ技术交流群

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);
Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐