准备OTA升级任务,tryStartOta实现了当前版本上报,订阅Topic,当有OTA升级推送时,会通过IOta.STEP_RCVD_OTA回调。
说明 用户可以使用OTA对多个模块升级。默认的OTA任务的模块名是default或者为空。用户可以自定义不同的模块。
tryStartOta会上报默认模块的版本号。如果要在启动时上报自定义模块的版本号,可以对每个模块调用reportModuleVersion进行上报。
用户可以在IOta.STEP_RCVD_OTA的回调结果中,查看OTA任务的模块名称和版本号。因此,在使用了多个自定义OTA模块的场景,也不需要重复调用tryStartOta。
在该回调中,用户返回true表示进行OTA升级,返回false表示拒绝此次OTA升级(设备重新上线或者主动请求OTA任务时,会再次下发该OTA任务)。
mOta.tryStartOta(mConfig, new OtaListener(){
public boolean onOtaProgress(int step, IOta.OtaResult otaResult) {
//当前升级过程的状态值(错误码)。
int code = otaResult.getErrorCode();
if (code != IOta.NO_ERROR) {
AppLog.e(TAG, "onOtaProgress error:" + code);
// show tip for uses.
return false;
}
Object data = otaResult.getData();
switch (step) {
case IOta.STEP_REPORT_VERSION:
// 通知用户已完成向服务端上报设备版本号。
break;
case IOta.STEP_SUBSCRIBE:
// 通知用户已完成向服务端订阅OTA报文。
break;
case IOta.STEP_RCVD_OTA:
// 通知用户当前OTA任务的版本号、模块信息、 MD5等信息。用户如果需要OTA升级,需要返回true;如果拒绝OTA升级,需要返回false(设备重新上线或者主动请求OTA任务时会再次下发该OTA任务)。
AppLog.d(TAG, "STEP_RCVD_OTA");
otaInfo = (OtaInfo) otaResult.getData();
AppLog.d(TAG, "STEP_RCVD_OTA,module:"+ otaInfo.module);
AppLog.d(TAG, "STEP_RCVD_OTA,ext:"+ otaInfo.extData);
break;
case IOta.STEP_DOWNLOAD:
// 下载OTA升级包中,用户可从中感知下载OTA升级包的百分比,具体请参见Demo。
break;
}
return true;
}
});