更新时间:2024-07-22 08:08:56下载pdf
实现批量 OTA 升级业务,需要用到以下能力:
在涂鸦体系下,只有当前用户权限是 家庭管理员及以上,才能进行设备 OTA 升级。
是否为家庭管理员及以上
查看用户的权限,请接入 家庭管理业务拓展 SDK,并按照以下代码查看。
// 查看当前用户的权限
var mMemberUseCase : IMemberUseCase = FamilyManagerCoreKit.getMemberUseCase()
mMemberUseCase.getMemberInfo(11,111,object :IFamilyMemberDataCallback<MemberBean>{
override fun onSuccess(result: MemberBean?) {
/**
* 0:家庭所有者 MemberRole.ROLE_OWNER
* 1:家庭管理员 MemberRole.ROLE_ADMIN
* 2:家庭普通成员 MemberRole.ROLE_MEMBER
*/
result?.role
}
override fun onError(errorCode: String?, errorMessage: String?) {
}
})
先调用 获取当前家庭下可 OTA 的设备列表 的接口,获取到所有可 OTA 的数据。UpgradeDevListBean
数据模型包含设备的名称、ID、设备固件信息,可以用这些信息来搭建个性化的界面。
IDeviceOTAManager otaManager = DeviceBusinessDataManager.getInstance().getDeviceOTAManager();
otaManager.queryHasUpgradeInfoDeviceList(mGid, new Business.ResultListener<UpgradeDevListBean>() {
@Override
public void onFailure(BusinessResponse bizResponse, UpgradeDevListBean bizResult, String apiName) {
// Failed
}
@Override
public void onSuccess(BusinessResponse bizResponse, UpgradeDevListBean bizResult, String apiName) {
if (bizResult.isStatus()) {
} else {
// Failed
}
}
});
在获取到 OTA 列表之后,就可以进行批量 OTA 升级了。目前,SDK 并未提供直接批量升级的接口,因此可以通过循环调用单个设备的 OTA 接口来完成。需要注意的是,如果是蓝牙 Mesh 或者 Beacon 协议的设备,需要保持设备与手机连接,并且升级时不要退出 App,否则会导致 OTA 失败。
步骤 1 已经获取到设备的固件信息,一般情况下直接使用该固件信息来调用 OTA 升级接口,就能完成设备的 OTA 升级。但是在此期间,设备的 OTA 信息发生了变更。因此,稳妥的做法是,先调用接口获取最新的设备的固件信息,再进行 OTA 升级。
val mIThingOTAService : IThingOTAService = OtaServiceManager.instance.getOtaService(devId)
mIThingOTAService?.getFirmwareUpgradeInfo(object : IGetOtaInfoCallback {
override fun onSuccess(upgradeInfoBeans: MutableList<UpgradeInfoBean>?) {
mIThingOTAService?.startFirmwareUpgrade(upgradeInfoBeans)
}
override fun onFailure(code: String?, error: String?) {
callback?.onError(code, error)
}
})
同步骤 2,设备的 OTA 状态也是需循环进行监听的。
IThingOTAService mIThingOTAService = OtaServiceManager.instance.getOtaService(devId)
mIThingOTAService.registerDevOTAListener(new IDevOTAListener() {
@Override
public void firmwareUpgradeStatus(ThingDevUpgradeStatusBean upgradeStatusBean) {
// 获取单设备的 OTA 状态
}
});
该内容对您有帮助吗?
是意见反馈该内容对您有帮助吗?
是意见反馈