MVVM架构安卓应用经典蓝牙替换为BLE实现数据交互咨询
BLE适配现有MVVM架构改造路径与实现方案
核心适配原则
最小侵入上层业务代码,保持原有ViewModel、Repository、DataStore的调用逻辑不变,仅替换底层蓝牙通信实现,复用已定义的参数枚举和请求码。
分层改造步骤
抽象统一通信接口
抽离经典蓝牙BluetoothController和BLEConnectionManager的公共能力,定义通用通信接口BluetoothCommunicator,包含参数读写、回调注册等通用方法:interface BluetoothCommunicator { // 写参数,reqCode复用原有预定义请求码 suspend fun writeParam(reqCode: Int, payload: ByteArray): Result<Unit> // 读参数 suspend fun readParam(reqCode: Int): Result<ByteArray> // 注册参数变更通知回调 fun registerParamObserver(reqCode: Int, callback: (ByteArray) -> Unit) }实现BLE接口适配层
针对已封装的单例ConnectionManager做适配,实现BluetoothCommunicator接口,内部增加请求码到BLE特征UUID、操作类型的映射表,把上层传入的请求码转换为BLE对应的特征操作,不用修改原有BLE基础能力代码。替换DataStore层依赖
原有DataStore依赖经典蓝牙BluetoothController,改为依赖BluetoothCommunicator接口,通过依赖注入的方式,在BLE设备连接成功后,将初始化完成的BLE适配实例注入DataStore。DataStore对外暴露的接口完全不变,上层ViewModel、Repository感知不到底层蓝牙类型的切换。适配BLE异步通信逻辑
针对BLE异步读写、通知的特性,调整DataStore的返回逻辑为Flow/LiveData,和原有经典蓝牙的回调逻辑对齐:ConnectionManager收到特征通知/读写响应后,通过特征UUID匹配到对应请求码- 将响应数据转发给DataStore的对应Flow
- 上层Repository直接监听Flow即可拿到参数更新,和原有调用逻辑保持一致
全局连接状态统一管理
在ConnectionManager中暴露全局连接状态Flow,DataStore层监听状态变更:连接断开时自动缓存未完成的读写请求,重连成功后自动重试,上层业务无需处理重连、请求缓存等底层逻辑。
完整交互流程示例
Fragment触发参数读取操作 → ViewModel调用对应业务方法 → Repository调用DataStore公开的读参数接口 → DataStore通过注入的
BluetoothCommunicator调用BLE读写能力 → BLE设备返回数据 → 适配层转译后回传给DataStore → DataStore解析为原有参数实体返回给Repository → ViewModel更新LiveData → Fragment监听数据变更更新UI
兼容经典蓝牙的可选方案
如果需要保留经典蓝牙支持,新增简单工厂类BluetoothCommunicatorFactory,根据当前连接的设备类型返回对应接口实现即可,上层业务逻辑无需任何修改。
内容的提问来源于stack exchange,提问作者Mohamed El Kayal
相关产品推荐
相关产品推荐

