OTA
普通WIFI设备OTA
若使用场景为开启APP之后自动检测升级,建议把检测升级过程放在application里,并维护一个deviceId和ACOTAUpgradeInfo的映射关系,通过static修饰放到内存里,在进入OTA升级页面后可以直接取出来显示。如想实现用户取消升级之后不再提示功能,则可以自己维护一个变量记录。
一、获取OTA管理器对象
ACOTAMgr otaMgr = AC.otaMgr();
二、检查升级
检查设备是否有新的OTA版本,同时获取升级日志。
long deviceId = 1; //设备逻辑id
int otaType = 1; //升级类型,1为系统MCU升级
otaMgr.checkUpdate(subDomain, new ACOTACheckInfo(deviceId, otaType), new PayloadCallback<ACOTAUpgradeInfo>() {
@Override
public void success(ACOTAUpgradeInfo info) {
//通过判断info.isUpdate()判断是否有新版本更新
}
@Override
public void error(ACException e) {
//网络错误或其他,根据e.getErrorCode()做不同的提示或处理
}
});
三、确认升级
otaMgr.confirmUpdate(subDomain,deviceId, newVersion, otaType, new VoidCallback() {
@Override
public void success() {
//确认升级
}
@Override
public void error(ACException e) {
//网络错误或其他,根据e.getErrorCode()做不同的提示或处理
}
});
蓝牙设备OTA
一、获取OTA管理器对象
ACOTAMgr otaMgr = AC.otaMgr();
二、查询OTA新版本信息
// 初始化当前设备的版本号等ACOtaCheckInfo信息,version为蓝牙设备当前版本
otaMgr.checkUpdate(subDomain, new ACOTACheckInfo(physicalDeviceId, version), new PayloadCallback<ACOTAUpgradeInfo>() {
@Override
public void success(ACOTAUpgradeInfo upgradeInfo) {
if(!upgradeInfo.isUpdate()){
//没有可升级的新版本
return;
}
//获取升级类型
if (upgradeInfo.getOtaMode() == 0) {
//静默升级
} else if(upgradeInfo.getOtaMode() == 1){
//用户确认升级
} else {
//强制升级
}
}
@Override
public void error(ACException e) {
// 查询失败
}
});
三、下载OTA文件
//upgradeInfo由上面接口获得;一般只有一个升级文件,所以取列表第一个文件
String url = upgradeInfo.getFiles().get(0).getDownloadUrl();
String checksum = upgradeInfo.getFiles().get(0).getCheckSum();
ACUtils.createSDDir("ota_download_path");
File file = null;
try {
//建议首先执行垃圾文件清理工作,防止磁盘写满升级失败,同时也防止异常情况下下载文件不完整被使用
file = ACUtils.createSDFile("ota_download_path/file_name");
} catch (IOException e) {
}
AC.fileMgr().downloadFile(file, url, checksum, new ProgressCallback() {
@Override
public void progress(double progress) {
//下载进度更新
}, new VoidCallback() {
@Override
public void success() {
//下载成功,建议调用otaMediaDone()接口通知云端下载文件成功,用于日志追踪
//同时进行设备ota升级,另升级成功后,建议在此清理已完成升级的版本文件
}
@Override
public void error(ACException e) {
//下载失败,建议清理掉当前下载的不完整文件
}
});