OTA

普通WIFI设备OTA

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) {
        //下载失败,建议清理掉当前下载的不完整文件
    }
});