当前位置: 首页 > news >正文

app-5 控制卡升级

一:核心功能总结

该类实现控制卡OTA升级功能,主要流程:

1.获取控制卡当前版本
2.检查服务器最新版本
3.下载升级文件(若有新版本)
4.发送升级命令与文件数据
5.处理升级过程中的各种状态与错误
6.通过异步任务处理网络操作,通过回调方法处理控制卡返回的升级状态,包含完整的错误处理与用户交互逻辑。


说明:FTP  用于从服务器下载升级包到本地设备,蓝牙用于将本地升级包传输给控制卡完成升级,二者分属不同阶段。★★★★★

二:从上到下各函数/代码模块的作用
 

2.1:类定义和成员变量

继承 BaseSerialActivity(串口通信基类),实现 View.OnClickListener 处理UI交互;通过成员变量维护升级流程状态(版本、文件传输、错误计数等)

/*** OTA升级* modified by amo at 20190315 12:43 for "起爆器" 改为 "控制卡",兼容新型蓝牙*/
public class OtaUpgradeActivity extends BaseSerialActivity implements View.OnClickListener {// UI组件private Button btnFirVersion;       // 获取版本按钮private Button btnUpgradeStart;     // 开始升级按钮(未启用)private TextView tvDetail;          // 升级详情文本private TextView tvDevicesName;     // 设备名称文本private ProgressDialog mProgressDialog; // 升级进度对话框// 版本与升级状态变量private String mVersionType = "A";  // 控制卡类型(A/B/C)private String mPresentVersion = "";// 控制卡当前版本private String mControllerID = "";  // 控制卡IDprivate String mServiceVersion = "";// 服务器最新版本private byte[] mFileByte = null;    // 升级文件字节数组private boolean mAllowSendFileData = false; // 是否允许传输文件数据// ... 其他状态标志(错误计数、自动更新标记等)


2.2 生命周期与初始化方法
 

@Override
protected int getLayoutId() {return R.layout.activity_ota_upgrade;
}//功能:指定当前Activity的布局文件 activity_ota_upgrade@Override
protected void beforeInitView() {super.beforeInitView();isAutoUpdate = getIntent().getBooleanExtra("needUpdate", false);
}//初始化前处理,从Intent中获取“是否自动更新”标志(isAutoUpdate)
@Override
protected void initView() {setTitle(getString(R.string.otaUpgrade));// 初始化UI组件btnFirVersion = findViewById(R.id.btn_getFirVersion);btnUpgradeStart = findViewById(R.id.btn_upgrdeStart);tvDetail = findViewById(R.id.tv_details);tvDevicesName = findViewById(R.id.tv_devicesName);// 设置点击监听btnFirVersion.setOnClickListener(this);btnUpgradeStart.setOnClickListener(this);// 初始化进度对话框mProgressDialog = new ProgressDialog(this);mProgressDialog.setStopCallBack(new ProgressDialog.stopCallBack() {@Overridepublic void stopSendFile() {mProgressDialog.dismissDialog();mAllowSendFileData = false;// 发送升级退出命令byte[] data = SendOrderUtils.sendOta_Upgrade_Exit();setSendingData(data);sendOrder(data);ToastUtil.showLong(mContext, R.string.cancel_success);}});
}

核心作用:
UI初始化:绑定布局控件,设置按钮点击事件。
进度对话框:通过 ProgressDialog 展示升级进度,设置停止回调(stopSendFile),调用 SendOrderUtils.sendOta_Upgrade_Exit() 发送蓝牙退出命令(核心API:SendOrderUtils 用于生成蓝牙通信协议指令
 

@Override
protected void afterInitView() {mFileDownPath = Common.FirVerFilePath; // 下载路径(Common类定义常量)File file = new File(mFileDownPath);if (!file.exists()) {file.mkdirs(); // 创建目录} else {// 删除目录下所有文件for (File subfile : file.listFiles()) {if (!subfile.isDirectory()) subfile.delete();}}
}

功能:初始化下载目录,确保路径存在且无旧文件(避免升级文件冲突)


http://www.lryc.cn/news/621537.html

相关文章:

  • 【CV 目标检测】②R-CNN模型
  • 「iOS」————UITableView性能优化
  • GCC深度剖析:从编译原理到嵌入式底层实战
  • 阿里云出里两款新的云服务器
  • 基于单片机的超市储物柜设计
  • 打破传统局限,人工智能+虚拟仿真赋能日化品设计实验教学
  • 异步并发×编译性能:Dart爬虫的实战突围
  • 笔试——Day39
  • Python洛谷做题39:P5729 【深基5.例7】工艺品制作
  • 【题解|两种做法】[ZJOI2008] 洛谷 P2600 瞭望塔[半平面交]
  • 第十章 项目进度管理-10.3 规划进度管理
  • Mini MAX AI应用矩阵测评报告——基于旗下多款产品的综合体验与行业价值分析
  • 【大模型微调系列-02】 深度学习与大模型初识
  • 《WINDOWS 环境下32位汇编语言程序设计》第1章 背景知识
  • uniapp纯前端绘制商品分享图
  • MySQL 主键详解:作用与使用方法
  • Uniapp之微信小程序自定义底部导航栏形态
  • mac 通过homebrew 安装和使用nvm
  • 【uni-app】根据角色/身份切换显示不同的 自定义 tabbar
  • 晶振电路的负载电容、电阻参数设计
  • Vue3 Element-plus 封装Select下拉复选框选择器
  • 一文打通 AI 知识脉络:大语言模型等关键内容详解
  • Docker容器定时任务时区Bug导致业务异常的环境变量配置解决方案
  • Vue3 + Element Plus 实现可搜索、可折叠、可拖拽的部门树组件
  • 【Redis】Redis典型应用——缓存
  • Redis 官方提供免费的 30 MB 云数据库
  • AI客户维护高效解决方案
  • [Chat-LangChain] 前端用户界面 | 核心交互组件 | 会话流管理
  • 制造装配、仓储搬运、快递装卸皆适配!MinkTec 弯曲形变传感器助力,让人体工学改变劳动生活
  • 测试工程师应当具备的能力