android串口通讯(JAVA)

一、app目录下添加

复制代码
implementation 'io.github.xmaihh:serialport:2.1.1'
1) 点击Sync Now更新依赖
2) AndroidManifest.xml文件添加读取设备信息权限
复制代码
<uses-permission android:name="android.permission.READ_PHONE_STATE" />

二、 使用

1) 创建MySerialPort.java文件
复制代码
package com.youlian.weight.serialport;

import android.content.Context;
import android.os.Handler;
import android.os.Looper;
import android.util.Log;

import java.io.IOException;
import java.util.Arrays;

import tp.xmaihh.serialport.SerialHelper;
import tp.xmaihh.serialport.bean.ComBean;
import tp.xmaihh.serialport.utils.ByteUtil;

public class MySerialPort {
    private SerialHelper serialHelper = null;
    private String Tag = "MySerialPort";
    private Handler handler;
    private boolean isHexType = true;
    private Context context;
    public MySerialPort(String port, Context context){
        this.context = context;
        serialHelper = new SerialHelper(port, 9600) {
            @Override
            protected void onDataReceived(ComBean paramComBean) {
//                String time = paramComBean.sRecTime;
                String rxText = new String(paramComBean.bRec);
                if (isHexType) {
                    //转成十六进制数据
                    rxText = ByteUtil.ByteArrToHex(paramComBean.bRec);
                }
//                Log.d(Tag,"收到消息:"+rxText);
                handler = new Handler(Looper.getMainLooper());
                String finalRxText = rxText;
                handler.post(new Runnable() {
                    @Override
                    public void run() {
                        typeOperate(finalRxText);
                    }
                });
            }
        };
        serialHelper.setStopBits(1);  //设置停止位
        serialHelper.setDataBits(8);  //设置数据位
        serialHelper.setParity(0);      //设置校验位
        serialHelper.setFlowCon(0);    //设置流控
        try {
            serialHelper.open();
        }catch (IOException e){
            Log.e(Tag,"串口打开失败");
        }
    }

    /**
     * 返回指令判断
     * @param data
     */
    private void typeOperate(String data){
        Log.d(Tag,"返回数据:" + data);
    }

    /**
     * 发送byte[]
     * @param bOutArray
     */
    public void sendByte(byte[] bOutArray){
        Log.e(Tag,"发送byte[]:"+ Arrays.toString(bOutArray));
        serialHelper.send(bOutArray);
    }

    /**
     * 发送Hex
     * @param sHex
     */
    public void sendHex(String sHex) {
        // Log.e(Tag, "发送Hex:" + sHex + ", 时间:" + getTime());
        serialHelper.sendHex(sHex);
    }

    /**
     * 发送ASCII
     * @param sTxt
     */
    public void sendTxt(String sTxt){
        Log.e(Tag,"发送ASCII:"+sTxt);
        serialHelper.sendTxt(sTxt);
    }

    /**
     * 打开串口
     */
    public void open(){
        try {
            serialHelper.open();
        }catch (Exception e){
            Log.e(Tag,"串口打开失败");
        }
    }

    /**
     * 关闭串口
     */
    public void close(){
        serialHelper.close();
    }
}
2) 实例化
复制代码
import com.you.weight.serialport.MySerialPort;

public static MySerialPort mySerialPort = null;

// /dev/ttyS3是你自己插的串口名称
mySerialPort = new MySerialPort("/dev/ttyS3", MainActivity.this);
相关推荐
懒人村杂货铺3 分钟前
Android BLE 扫描完整实战
android
Jerry&Grj17 分钟前
SpringBoot埋点功能技术实现方案深度解析:架构设计、性能优化与扩展性实践
java·微服务·性能优化·springboot·架构设计·埋点技术
没有bug.的程序员23 分钟前
Redis Stream:轻量级消息队列深度解析
java·数据库·chrome·redis·消息队列
用户81607918333343 分钟前
告别“魔法”:包你解决 Gradle 的下载慢问题
java
当归10241 小时前
SQL Server死锁排查实战指南
java·服务器·网络
echoyu.1 小时前
消息队列-初识kafka
java·分布式·后端·spring cloud·中间件·架构·kafka
little_xianzhong2 小时前
关于对逾期提醒的定时任务~改进完善
java·数据库·spring boot·spring·mybatis
百锦再2 小时前
脚本语言的大浪淘沙或百花争艳
java·开发语言·人工智能·python·django·virtualenv·pygame
小猪咪piggy2 小时前
【JavaEE】(23) 综合练习--博客系统
java·数据库·java-ee
周航宇JoeZhou2 小时前
JP4-7-MyLesson后台前端(五)
java·前端·vue·elementplus·前端项目·mylesson·管理平台