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

相关推荐
黄毛火烧雪下8 小时前
Java 核心知识点总结(一)
java·开发语言
其实防守也摸鱼8 小时前
软件安全与漏洞--软件安全编码与防御技术理论题库
开发语言·网络·安全·网络安全·软件安全·软件安全与漏洞
x138702859579 小时前
c语言中srtlen(指针使用计算字符长度)、传值和传址调用
c语言·开发语言·算法·visual studio
iCxhust9 小时前
C#进程管理程序
开发语言·汇编·stm32·单片机·c#·微机原理
凡人叶枫9 小时前
Effective C++ 条款28:避免使用 handles 指向对象内部
linux·服务器·开发语言·c++·嵌入式开发
努力成为AK大王9 小时前
并发编程的核心挑战、优化方案与核心知识点总结
java·开发语言·数据库
AI 编程助手GPT10 小时前
用 Python 做一个世界杯赛前分析脚本:以巴西 vs 摩洛哥为例
开发语言·网络·人工智能·python·chatgpt
lihao lihao10 小时前
Linux信号
开发语言·c++·算法
Java患者·10 小时前
《Python 人脸识别入门实践:从人脸检测到人脸比对完整实现》
开发语言·python·opencv·目标检测·计算机视觉·目标跟踪·视觉检测
ceclar12310 小时前
C# 的任务并行库(TPL)
开发语言·c#·.net