安卓串口通訊三

核心代碼如下:

java 复制代码
package com.example.comandroid;

import static android.content.ContentValues.TAG;

import android.graphics.Color;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

import androidx.activity.EdgeToEdge;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;

import com.jackiepenghe.serialportlibrary.MultipleSerialPortManager;
import com.jackiepenghe.serialportlibrary.OnSerialPortDataChangedListener;
import com.jackiepenghe.serialportlibrary.SerialPortManager;
import com.sscl.baselibrary.utils.ConversionUtil;
import com.sscl.baselibrary.utils.DebugUtil;
import com.sscl.baselibrary.utils.ToastUtil;

import java.nio.charset.Charset;

/**
* 功能描述:
* 版权所有:
* 版本:1.0
* 作者:
* 创建时间 ${DATE} ${hour}
* 邮箱 :2848444745@qq.com
*
*/

public class MainActivity extends AppCompatActivity {
    private Button btnOpen;
    private Button btnClose;
    private Button btnSend;
    private TextView text;
    private String serialPort="/dev/ttyS1";//串口路徑
//    private String serialPort="/dev/ttyS2";//串口路徑
//    private String serialPort="/dev/ttyS3";//串口路徑
//    private String serialPort="/dev/ttyS4";//串口路徑
    private int baudRate = 9600;//波特率
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        btnClose=findViewById(R.id.btn_close);
        btnOpen=findViewById(R.id.btn_open);
        btnSend=findViewById(R.id.btn_send);
        text=findViewById(R.id.textView);

        //打開串口
        btnOpen.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                openSerialPort();
            }
        });

        //關閉串口
        btnClose.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                MultipleSerialPortManager.closeSerialPort(serialPort);
            }
        });
        //發送數據
        btnSend.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                sendData("發送測試");
            }
        });

    }

    /**
     * 串口监听
     */
    private final OnSerialPortDataChangedListener onSerialPortDataChangedListener = (data, size) -> {
        byte[] cache = new byte[size];
        System.arraycopy(data, 0, cache, 0, size);
        DebugUtil.warnOut(TAG, "cache = " + ConversionUtil.byteArrayToHexStr(cache));
        DebugUtil.warnOut(TAG, "cache = " + new String(cache));
        String result = ConversionUtil.byteArrayToHexStr(cache);
        text.setText(result);


    };

    /**
     * 打开串口
     */
    private void openSerialPort() {
        boolean open = MultipleSerialPortManager.openSerialPort(serialPort, baudRate, onSerialPortDataChangedListener);
        if (open) {
            ToastUtil.toastLong(this, "串口打開成功");
            DebugUtil.warnOut(TAG, "串口打開成功");
            this.serialPort = serialPort;
        } else {
            DebugUtil.warnOut(TAG, "串口打開失敗");
            ToastUtil.toastLong(this, "串口打開失敗");
        }


    }

    /**
     * 获取串口信息
     */
    private void getSerialPortInfo() {
        String[] allDevices = MultipleSerialPortManager.getAllDevices();
        if (allDevices.length == 0) {
            DebugUtil.warnOut(TAG, "allDevices length == 0");
        }
        for (int i = 0; i < allDevices.length; i++) {
            DebugUtil.warnOut(TAG, "allDevices[" + i + "] = " + allDevices[i]);
        }
        String[] allDevicesPath = MultipleSerialPortManager.getAllDevicesPath();
        if (allDevicesPath.length == 0) {
            DebugUtil.warnOut(TAG, "allDevicesPath length == 0");
        }
        for (int i = 0; i < allDevicesPath.length; i++) {
            DebugUtil.warnOut(TAG, "allDevicesPath[" + i + "] = " + allDevicesPath[i]);
        }

    }

   // 关闭串口
    private void closeSerialPort() {
        if (serialPort == null) {
            return;
        }
        MultipleSerialPortManager.closeSerialPort(serialPort);
    }

    // 發送數據
    private void sendData(String data) {
        boolean succeed= MultipleSerialPortManager.writeData(serialPort, "1234567890", Charset.forName("UTF-8"));
        if (!succeed){
            ToastUtil.toastLong(this, "發生失敗");
        }else{
            ToastUtil.toastLong(this, "發送成功");
        }

    }
    @Override
    protected void onDestroy() {
        super.onDestroy();
        closeSerialPort();
    }
}

想要完整的了解,可以看下完整的dome,這我也給出來了完整dome如下:

https://download.csdn.net/download/qq_41733851/89288862?spm=1001.2014.3001.5503

相关推荐
-SOLO-8 小时前
Android Event 日志完全指南
android
壮哥_icon9 小时前
【Android 系统开发】从掉帧卡顿到丝滑:高频硬件中断(IRQ)的 CPU 亲和性性能优化实战
android·性能优化
千里马学框架9 小时前
Android Framework 新手学习踩坑建议指南
android·智能手机·性能优化·framework·aaos·车载开发·系统工程师
我命由我1234511 小时前
执行 Gradle 指令报错,无法将“grep”项识别为 cmdlet、函数、脚本文件或可运行程序的名称
android·java·java-ee·android studio·android jetpack·android-studio·android runtime
狂奔solar13 小时前
ARMA 模型:从白噪声到万能逼近器
android
渣渣灰飞13 小时前
MySQL 系统学习 第五阶段:企业级 MySQL 实战开发 第二章:RBAC 权限系统设计
android·学习·mysql
qq_4228286213 小时前
android 图形学之图层数据送显及合成图层(七)
android
MiyamuraMiyako14 小时前
Compose:从自动滚动到双锚点 LazyLayout
android·android jetpack
用户634214199350716 小时前
base_logger_core --- 跨平台 C++ 日志核心库
android
苦瓜花16 小时前
【Kotlin】初入门
android·开发语言·kotlin