原生 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

相关推荐
Gofarlic_oms119 小时前
利用API实现ANSYS许可证管理自动化集成
运维·服务器·开发语言·matlab·自动化·负载均衡
AI+程序员在路上20 小时前
VS Code 完全使用指南:下载、安装、核心功能与 内置AI 编程助手实战
开发语言·人工智能·windows·开源
invicinble20 小时前
这里对java的知识体系做一个全域的介绍
java·开发语言·python
catchadmin20 小时前
使用 PHP TrueAsync 改造 Laravel 协程异步化的可行路径
开发语言·php·laravel
wbs_scy21 小时前
【Linux 线程进阶】进程 vs 线程资源划分 + 线程控制全详解
java·开发语言
AI人工智能+电脑小能手21 小时前
【大白话说Java面试题】【Java基础篇】第15题:JDK1.7中HashMap扩容为什么会发生死循环?如何解决
java·开发语言·数据结构·后端·面试·哈希算法
郑州光合科技余经理1 天前
同城O2O海外版二次开发实战:从支付网关到配送算法
开发语言·前端·后端·算法·架构·uni-app·php
南子北游1 天前
Python学习(基础语法1)
开发语言·python·学习
张健11564096481 天前
使用信号量限制并发数量
开发语言·c++
糯米团子7491 天前
Web Worker
开发语言·前端·javascript