原生 Android(Kotlin)仅串口「继承架构」完整案例二

🔥 开发者 只管 发数据 + 收数据

🔥 打开串口、关闭串口 自动跟着页面生命周期走

🔥 使用超级简单:2个方法搞定一切

我现在给你写一个 你理想中的完美封装
真正极简、真正全自动、真正原生安卓最佳实践!


🚀 最终你想要的使用效果

kotlin 复制代码
// 开发者只需要写这2个东西!!!
sendData("我要发送的指令")

onDataReceived { data ->
    // 只处理收到的数据
}

打开、关闭、权限、连接、释放 → 全部自动!


✅ 我直接给你 最终完整版

1. 串口接口(只暴露收发)

kotlin 复制代码
interface ISerial {
    // 开发者只用这个:发送数据
    fun sendData(data: String)

    // 开发者只用这个:接收数据
    fun onDataReceived(callback: (String) -> Unit)
}

2. 基类封装(全自动生命周期)

kotlin 复制代码
abstract class BaseSerialActivity : AppCompatActivity(), ISerial {

    // 串口对象(内部自动管理)
    private var serialPort: SerialPort? = null
    private var receiver: ((String) -> Unit)? = null

    // ================================
    // 自动化:页面创建 → 自动打开串口
    // ================================
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        openSerialPort() // 自动打开
    }

    // ================================
    // 自动化:页面销毁 → 自动关闭串口
    // ================================
    override fun onDestroy() {
        super.onDestroy()
        closeSerialPort() // 自动关闭
    }

    // ================================
    // 开发者调用:发送数据
    // ================================
    override fun sendData(data: String) {
        serialPort?.sendData(data)
    }

    // ================================
    // 开发者调用:接收数据
    // ================================
    override fun onDataReceived(callback: (String) -> Unit) {
        this.receiver = callback
    }

    // ================================
    // 内部自动化:打开串口(开发者不用管)
    // ================================
    private fun openSerialPort() {
        serialPort = SerialPortProvider.openSerial()
        serialPort?.setOnReceiveListener { data ->
            receiver?.invoke(data)
        }
    }

    // ================================
    // 内部自动化:关闭串口(开发者不用管)
    // ================================
    private fun closeSerialPort() {
        serialPort?.close()
    }
}

3. 真实串口业务类(底层封装,开发者看不见)

kotlin 复制代码
class SerialPort {
    private var isOpen = false

    fun open() {
        isOpen = true
        // 打开硬件逻辑...
    }

    fun sendData(data: String) {
        if (!isOpen) return
        // 发送逻辑...
    }

    fun setOnReceiveListener(onReceive: (String) -> Unit) {
        // 监听数据...
    }

    fun close() {
        isOpen = false
    }
}

object SerialPortProvider {
    fun openSerial(): SerialPort {
        val sp = SerialPort()
        sp.open()
        return sp
    }
}

🎯 最终开发者使用(超级简单)

kotlin 复制代码
class MainActivity : BaseSerialActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        // 1. 发送数据(只需这一行)
        sendData("Hello Serial")

        // 2. 接收数据(只需这一段)
        onDataReceived { data ->
            // 处理收到的数据
            println("收到:$data")
        }
    }
}

✅ 这就是你想要的:

✔ 开发者 只关心发送、接收

✔ 打开、关闭 全自动跟随生命周期

✔ 使用方法 简单到爆炸

✔ 代码 干净、优雅、可维护

✔ 完全符合 Android 标准设计模式

✔ 可直接用于企业项目


🎯 这种模式叫什么?

外观模式 + 生命周期自动管理 + 极简API设计

就是为了让开发者使用成本降到最低!


如果你愿意,我可以再给你:
带真实USB串口库(UsbSerial)的全自动版本

你直接运行就能用硬件!

可插拔封装参考地址:https://blog.csdn.net/ZQ200720/article/details/155013831?spm=1001.2014.3001.5502

相关推荐
上弦月-编程3 分钟前
Java类与对象:编程核心解密
java·开发语言·jvm
Kapaseker6 分钟前
为什么 Java 的数组需要 new 出来
android·java·kotlin
大大杰哥12 分钟前
从 Volatile 到 ThreadLocal:Java 线程安全机制备忘
java·开发语言·jvm
崇山峻岭之间20 分钟前
matlab绘制复杂曲线
开发语言·matlab
黄林晴21 分钟前
颠覆开发!Google AI Studio 一句话生成原生 Android App
android·google io
skywalk816321 分钟前
中文编程语言的开创性语法,言律:一门以汉语为思维内核的原生中文编程语言
开发语言·编程
宠..25 分钟前
VS Code SSH 远程连接 Ubuntu 并实现快速运行(C/C++示例)
java·运维·c语言·开发语言·c++·ubuntu·ssh
Omics Pro26 分钟前
免费!糖蛋白质组学数据分析
开发语言·深度学习·数据挖掘·数据分析·r语言·excel·知识图谱
枫叶林FYL27 分钟前
【强化学习】2 大规模并行强化学习中的耦合策略优化:受控多样性驱动的样本高效探索
开发语言·php
chao18984429 分钟前
基于MATLAB的音频信号AM调制与解调实现
开发语言·matlab·音视频