## OTA说明

小微SDK提供可选的OTA功能，他是单独的so存在。但是我们强烈建议您选用该功能，因为OTA的so中还附带了设备网络监测功能，当某些资源无法播放、CDN无法访问，DNS解析出错等问题出现时，可以自动检测并上传日志，用于问题分析。

小微提供的OTA只负责资源的查询和下载，下载完毕后image的替换不由小微负责。在使用OTA前，需要前往[小微官网硬件配置平台](https://xiaowei.weixin.qq.com/hardware)进行配置。配置完成后，在SDK端即可查询到此OTA信息，并选择下载。

### SDK OTA相关接口

#### 初始化
要使用OTA功能，首先需要初始化OTA模块，即` static native int deviceConfigOta()`。然后设置查询和下载的回调，即` public void setOtaListener(String url,OtaListener listener)`。若是ota下载url传空值，若url不是空值，可以用来配合otaDwonload下载其他资源。

#### 查询OTA
初始化完成后，可以使用查询接口`int queryOtaUpdate(String businessID, int channel, int otaType, int debugFlag)`来查询OTA信息。查询结果通过`OtaListener.onOtaCheckResult(...)`返回，一次只能查询一个OTA信息。在上一次OTA查询结束前再次调用该接口，上次查询自动终止。

* `businessID` 业务号，通常填写nullptr即可，除非有特殊定制。
* `channel` 业务通道，通过官网配置的OTA，channel为1
* `otaType` ota升级类型 1，即软件升级 3，硬件升级
* `debugFlag ` 测试标记，在正式OTA前可以进行测试，1为正式模式，在官网配置的测试OTA中对应flag为2。

#### 查询结果
`void onOtaCheckResult(int errCode, String businessID, boolean newVersion, DeviceOTAInfo otaInfo);`

当`errCode`不为0时，`businessID`对应查询时的`businessID`，`newVersion`为true时代表有新版本，此时后面两个参数有意义，否则是nullptr。在`otaInfo`描述了OTA版本信息。请参考DeviceOTAInfo.java文件中的说明。

#### 下载 
查询到下载信息后，可通过`int otaDwonload(String url, String downloadPath, int hashType, String hashValue)`接口来进行下载，并在`OtaListener`的回调中获得下载状态。这个函数其实不光可以用于查询到的OTA包下载，也可用于任何其他http资源的下载。

此接口不支持断点续传，需要一次性下载完毕。

#### 取消下载
通过`int stopOtaDownload(String url)`来取消下载，空的url将取消所有下载。这个接口不会自动清理已下载的内容和下载到一半的内容。


#### 其它
1. 在官网配置OTA时有“版本介绍”和“透传给客户端”字段，分别对应OTA查询结果的`updateTips`和`extraInfo`。
2. 只有设备端自身版本符合官网上的配置时，才能查询到OTA信息，设备端自身版本为设备在login的时候填写的`DeviceLoginInfo.productVersion`。
