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();}}
}
功能:初始化下载目录,确保路径存在且无旧文件(避免升级文件冲突)