设备管理
更新时间:2025-07-02 14:54:22
包括设备绑定,设备解绑,设备列表
package com.polaris.iot.appsdk.libuserdevicemgr
object UserDeviceMgr {
/**
* 获取用户设备列表
* @param deviceListReq [DeviceListReq]
* @param iotCallback [IoTCallback]
*/
fun getDeviceList(deviceListReq: DeviceListReq, iotCallback: IoTCallback)
/**
* 获取设备详细
* 第三方可能用自己的设备列表,只有iotId,productKey,deviceName 需要请求数据用于后续业务开发
*/
fun getDeviceDetail(deviceList: List<DeviceInfo>, listener: OnResultListener<List<DeviceInfo>>)
/**
* 获取网关设备子设备列表
*
* @param childListReq [DeviceChildListReq]
* @param iotCallback [IoTCallback]
*/
@JvmStatic
fun getChildDeviceList(childListReq: DeviceChildListReq, iotCallback: IoTCallback)
/**
* 修改设备昵称
*@param iotId 设备的唯一标识符。
*@param nickName 设备的昵称或别名。
*@param iotCallback [IoTCallback]。
*/
fun setDeviceNickname(iotId: String, nickName: String, iotCallback: IoTCallback)
/**
* 设备解绑
* @param iotId iotId 平台为设备颁发的ID,设备的唯一标识符。
* @param iotCallback [IoTCallback]
*/
fun deviceUnbind(iotId : String, iotCallback: IoTCallback)
}
设备绑定
总体介绍参考设备绑定开发指南。
设备绑定模式因设备差异分为以下几种:
/**
* 设备绑定模式
*
*/
enum class DeviceBindModeEnum {
/**
* App获取bindToken传递给设备 默认
*/
BIND_TOKEN,
/**
* 扫码激活绑定 APP扫设备机身二维码快速绑定 (有网设备,如4G设备,插网线设备,或带屏可自行连网设备)
*/
SCAN_QUICK_ACTIVE,
}
注意
- 设备绑定详细流程说明请点击
- 用户绑定设备,开始与结束需要匹配调用。绑定流程调用start开始后,退出绑定流程必须调用stop
- app自行控制绑定流程超时,超时后请调用stop结束绑定流程
object UserDeviceAdd {
/**
* 绑定设备匹配随机数,通过配网途径传递给设备 只读
* 仅当绑定状态变为DeviceAddStatus.STARTED后有值
*/
@JvmStatic
val bindToken: String
/**
* 设置绑定模式 废弃,请使用 prepare 替代
*/
@Deprecate
@JvmStatic
fun setBindMode(bindMode: DeviceBindModeEnum)
/**
* 准备绑定 设置绑定模式
*
* @param bindMode
*/
@JvmStatic
fun prepare(bindMode: DeviceBindModeEnum)
/**
* 设置监听,重复设置后设置会覆盖前设置
* @param listener [OnDeviceAddListener] 绑定流程状态监听
*/
@JvmStatic
fun setOnDeviceAddListener(listener: OnDeviceAddListener)
/**
* 开始绑定
*/
@JvmStatic
fun start()
/**
* 开始绑定 传入productKey与deviceName多一次校验更安全
* @param productKey 产品型号 可传空字串
* @param deviceName 产品序列号 可传空字串
*/
@JvmStatic
fun start(productKey: String?, deviceName: String?)
/**
* 开始绑定
* @param listener [OnDeviceAddListener] 绑定流程状态监听
*/
@JvmStatic
fun start(listener: OnDeviceAddListener)
/**
* 开始绑定 传入productKey与deviceName多一次校验更安全
* @param productKey 产品型号 可传空字串
* @param deviceName 产品序列号 可传空字串
* @param listener [OnDeviceAddListener] 绑定流程状态监听
*/
@JvmStatic
fun start(productKey: String, deviceName: String, listener: OnDeviceAddListener)
/**
* 停止绑定,与[start]匹配调用
*/
@JvmStatic
fun stop()
}
绑定模式
- BIND_TOKEN 模式
注意
- 关于设备配网
配网流程需要app自行实现,app将wifi信息传递给设备。常见通信方式:
- 设备扫描app生成的二维码
- 蓝牙
- AP连接
- 局域网广播等
- 关于绑定流程
- 调start方法,绑定状态变为STARTED时获取bindToken (每次start都返回新的bindToken,有效时长30分钟)
- 将bindToken通过支持的通信方式传递给设备,设备在配网成功,保证网络连通情况下,通过DeviceSDK进行设备绑定
- 海外绑定设备另需将IoTSmart.getRegionId()一起传递给设备,SDK版本要求:v1.4.1
- App只监听设备绑定是否成功的回调(超时自行控制,最大超时依赖bindToken的有效时长)超时后请务必调用停止绑定接口stop
示例一
import com.polaris.iot.appsdk.libcommon.constants.IoTSDKError
import com.polaris.iot.appsdk.libcommon.log.IoTLogger
import com.polaris.iot.appsdk.libcommon.utils.JsonUtils
import com.polaris.iot.appsdk.libuserdevicemgr.OnDeviceAddListener
import com.polaris.iot.appsdk.libuserdevicemgr.UserDeviceAdd
import com.polaris.iot.appsdk.libuserdevicemgr.enums.DeviceAddStatus
import com.polaris.iot.appsdk.libuserdevicemgr.enums.DeviceBindModeEnum
//准备绑定 传入绑定模式
UserDeviceAdd.prepare(DeviceBindModeEnum.BIND_TOKEN) //setBindMode废弃
//开始绑定流程
UserDeviceAdd.start(productKey,deviceName,new OnDeviceAddListener() {
@override
public void onDeviceAddStatus(status: DeviceAddStatus,exception: IoTSDKError) {
//监听绑定状态
switch(status){
case DeviceAddStatus.STARTED:
//获取设备配网绑定随机数(有效时长30分钟),传递给设备
//比如二维码配网,配网随机数需要填入二维码信息中供设备识别获取
String bindToken = UserDeviceAdd.getBindToken();
//接入区域为海外时需要获取regionId,同bindToken一起传递给设备, 需要SDK版本v1.4.1
//接入区域为中国大陆可不需要regionId
String regionId = IoTSmart.getRegionId()
break;
case DeviceAddStatus.SUCCESS:
JSONObject payload = JsonUtils.parseJson(exception.getMessage())
if(payload != null){
// 设备id
String iotId = payload.getString("iotId")
//如果没有先扫设备机身二维码获取到prodcutKey和deviceName 可从绑定结果中获取
String productKey = payload.getString("productKey")
String deviceName = payload.getString("deviceName")
}
//成功处理
UserDeviceAdd.stop();
break;
case DeviceAddStatus.FAILED:
//失败处理
UserDeviceAdd.stop();
break;
}
})
示例二
import com.polaris.iot.appsdk.libcommon.constants.IoTSDKError
import com.polaris.iot.appsdk.libcommon.log.IoTLogger
import com.polaris.iot.appsdk.libcommon.utils.JsonUtils
import com.polaris.iot.appsdk.libuserdevicemgr.OnDeviceAddListener
import com.polaris.iot.appsdk.libuserdevicemgr.UserDeviceAdd
import com.polaris.iot.appsdk.libuserdevicemgr.enums.DeviceAddStatus
import com.polaris.iot.appsdk.libuserdevicemgr.enums.DeviceBindModeEnum
//准备绑定 传入绑定模式
UserDeviceAdd.prepare(DeviceBindModeEnum.BIND_TOKEN) //setBindMode废弃
//监听器
OnDeviceAddListener listener = new OnDeviceAddListener() {
@override
public void onDeviceAddStatus(status: DeviceAddStatus,exception: IoTSDKError) {
//监听绑定状态
switch(status){
case DeviceAddStatus.STARTED:
//获取设备配网绑定随机数(有效时长30分钟),传递给设备
//比如二维码配网,配网随机数需要填入二维码信息中供设备识别获取
String bindToken = UserDeviceAdd.getBindToken();
//接入区域为海外时需要获取regionId,同bindToken一起传递给设备, 需要SDK版本v1.4.1
//接入区域为中国大陆可不需要regionId
String regionId = IoTSmart.getRegionId()
break;
case DeviceAddStatus.SUCCESS:
JSONObject payload = JsonUtils.parseJson(exception.getMessage())
if(payload != null){
// 设备id
String iotId = payload.getString("iotId")
//如果没有先扫设备机身二维码获取到prodcutKey和deviceName 可从绑定结果中获取
String productKey = payload.getString("productKey")
String deviceName = payload.getString("deviceName")
}
//成功处理 结束绑定流程
UserDeviceAdd.stop();
break;
case DeviceAddStatus.FAILED:
//失败处理 结束绑定流程
UserDeviceAdd.stop();
break;
}
}
//请及时设置设置监听
UserDeviceAdd.setOnDeviceAddListener(listener)
//开始绑定流程
UserDeviceAdd.start(productKey,deviceName,)
-
SCAN_QUICK_ACTIVE模式
APP扫机身二维码获取设备信息进行激活绑定
信息
主要适用以下几类设备:
- GPRS / 3G / 4G 等蜂窝网络设备
- 可在屏幕上输入 Wi-Fi 密码的带屏类无线设备,如云相框
- 有线设备
以上这几种设备都有一个共同点,设备在不用 App 参与的情况下自身就可以连接互联网
示例
import com.polaris.iot.appsdk.libcommon.constants.IoTSDKError
import com.polaris.iot.appsdk.libcommon.log.IoTLogger
import com.polaris.iot.appsdk.libcommon.utils.JsonUtils
import com.polaris.iot.appsdk.libuserdevicemgr.OnDeviceAddListener
import com.polaris.iot.appsdk.libuserdevicemgr.UserDeviceAdd
import com.polaris.iot.appsdk.libuserdevicemgr.enums.DeviceAddStatus
import com.polaris.iot.appsdk.libuserdevicemgr.enums.DeviceBindModeEnum
import com.alibaba.fastjson.JSONObject
//准备绑定 传入绑定模式
UserDeviceAdd.prepare(DeviceBindModeEnum.SCAN_QUICK_ACTIVE) //setBindMode废弃
//开始绑定流程
UserDeviceAdd.start(productKey,deviceName,new OnDeviceAddListener() {
@override
public void onDeviceAddStatus(status: DeviceAddStatus,exception: IoTSDKError) {
//监听绑定状态
switch(status){
case DeviceAddStatus.SUCCESS:
JSONObject payload = JsonUtils.parseJson(exception.getMessage())
if(payload != null){
// 设备id
String iotId = payload.getString("iotId")
}
//成功处理 结束绑定流程
UserDeviceAdd.stop();
break;
case DeviceAddStatus.FAILED:
//失败处理 结束绑定流程
UserDeviceAdd.stop();
break;
}
})
结束绑定
- 收到绑定结果状态后调用
- 在用户退出绑定流程时调用
- 上层控制超时时调用
UserDeviceAdd.stop();
绑定成功
收到绑定成功后,可以从exception中message里取到携带的iotId信息, message为一个JSON格式字符串
详见绑定示例
绑定失败
-
绑定超时由app层自行控制
-
失败 IoTSDKError
code message 备注 31065 {"account":"13800138000","bindTime":1749175876000}
被其它用户绑定 31068 设备不在线 31069 设备已绑定未重置 31499 给设备发送信令失败
设备解绑
import com.polaris.iot.appsdk.libcommon.constants.IoTSDKError
import com.polaris.iot.appsdk.libcommon.log.IoTLogger
import com.polaris.iot.appsdk.libcommon.utils.JsonUtils
import com.polaris.iot.appsdk.libuserdevicemgr.UserDeviceMgr
import com.polaris.iot.appsdk.libuserdevicemgr.model.DeviceUnbindReq;
import com.polaris.iot.appsdk.libapiclient.callback.IoTCallback;
import com.polaris.iot.appsdk.libapiclient.callback.IoTResponse;
import com.polaris.iot.appsdk.libapiclient.request.IoTRequest;
UserDeviceMgr.deviceUnbind(new DeviceUnbindReq(deviceInfo.getIotId()), new IoTCallback() {
@Override
public void onFailure(@Nullable IoTRequest request, @NonNull IoTSDKError exception) {
Toast.makeText(DeviceListActivity.this, "删除设备[" + deviceInfo.getDeviceName() + "]失败", Toast.LENGTH_SHORT).show();
}
@Override
public void onResponse(@NonNull IoTRequest request, @NonNull IoTResponse response) {
Toast.makeText(DeviceListActivity.this, "删除设备[" + deviceInfo.getDeviceName() + "]成功", Toast.LENGTH_SHORT).show();
getDeviceList();
}
});
设备列表
import com.polaris.iot.appsdk.libuserdevicemgr.UserDeviceMgr;
import com.polaris.iot.appsdk.libuserdevicemgr.model.DeviceInfo;
import com.polaris.iot.appsdk.libuserdevicemgr.model.DeviceListReq;
import com.polaris.iot.appsdk.libuserdevicemgr.model.DeviceListResp;
import com.polaris.iot.appsdk.libapiclient.callback.IoTCallback;
import com.polaris.iot.appsdk.libapiclient.callback.IoTResponse;
import com.polaris.iot.appsdk.libapiclient.request.IoTRequest;
UserDeviceMgr.getDeviceList(new DeviceListReq(1, 20, null), new IoTCallback() {
@Override
public void onFailure(@Nullable IoTRequest request, @NonNull IoTSDKError exception) {
Toast.makeText(DeviceListActivity.this, "获取设备列表失败", Toast.LENGTH_SHORT).show();
}
@Override
public void onResponse(@NonNull IoTRequest request, @NonNull IoTResponse response) {
DeviceListResp deviceListResp = (DeviceListResp) response.getData();
List<DeviceInfo> deviceList = deviceListResp.getData();
}
});
设备信息
/**
* Device info
*
* @property iotId 平台为设备颁发的ID,设备的唯一标识符。
* @property deviceName 设备序列号
* @property productKey 产品型号唯一值
* @property status 设备状态。0(表示未激活);1(表示在线);2(休眠) 3(表示离线);8(表示禁用)。
* @property owned 设备和用户的关系,可取值:0(表示分享者),1(表示拥有者)。
* @property gmtModified 绑定设备的时间
* @property nodeType 设备的节点类型,可取值包括:DEVICE,GATEWAY。
* @property thingType 类型: DEVICE:普通设备
* @property region 设备当前所在的机房
* @property identityId 用户的身份ID。
* @property productName 设备所属产品的型号名称。
* @property productModel 设备所属产品的型号。
* @property nickName 设备昵称
* @property netType 产品下设备的联网方式,可取值: NET_LORA(表示LoRa);NET_CELLULAR(表示2G/3G/4G/5G蜂窝网);NET_WIFI(表示Wi-Fi);NET_ZIGBEE(表示ZigBee);NET_ETHERNET(表示以太网);NET_OTHER(表示其他网络类型)。
* @property groupId 设备分组ID 可选
* @property sharePermissionList 只有owned=0有值,分享权限列表,live:直播,control:设备控制,record:录像回看,ptz:云台控制,voiceIntercom:语音对讲,setting:高级设置,notification:消息通知
* @constructor Create empty Device info
*/
open class DeviceInfo(
iotId: String,
productKey: String,
deviceName: String,
var status: Int,
val owned: String,
val gmtModified: Long,
var region: String?,
val identityId: Long?,
val productName: String?,
val productModel: String?,
var nickName: String?,
val netType: String?,
val groupId: Long?,
val sharePermissionList: List<String>? = null
)
设备详细
当不使用SDK中的设备列表,需要获取设备详细以正常使用后续播放等
List<XXXDeviceInfo> thirdDeviceList //接入方自有设备列表 需要有iotId productKey deviceName
List<DeviceInfo> list = thirdDeviceList.stream().map(it->new DeviceInfo(it.getIotId(),it.getProductKey(),it.getDeviceName()))
.collect(Collectors.toList());
UserDeviceMgr.getDeviceDetail(list, new OnResultListener<List<DeviceInfo>>() {
@Override
public void onResult(List<DeviceInfo> result) {
onDeviceListResp(result);
//播放等操作
}
@Override
public void onError(@NonNull IoTSDKError error) {
}
});
网关设备子设备
获取网关设备子设备列表
import com.polaris.iot.appsdk.libuserdevicemgr.UserDeviceMgr;
import com.polaris.iot.appsdk.libuserdevicemgr.model.DeviceInfo;
import com.polaris.iot.appsdk.libuserdevicemgr.model.DeviceChildListReq;
import com.polaris.iot.appsdk.libuserdevicemgr.model.DeviceListResp;
import com.polaris.iot.appsdk.libapiclient.callback.IoTCallback;
import com.polaris.iot.appsdk.libapiclient.callback.IoTResponse;
import com.polaris.iot.appsdk.libapiclient.request.IoTRequest;
private DeviceInfo mDeviceInfo;
private void getDeviceList() {
RecyclerView rvDeviceList = binding.rvDeviceList;
TextView tvNoDeviceTip = binding.tvNoDeviceTip;
long reqStartTime = System.currentTimeMillis();
UserDeviceMgr.getChildDeviceList(new DeviceChildListReq(mDeviceInfo), new IoTCallback() {
@Override
public void onFailure(@Nullable IoTRequest request, @NonNull IoTSDKError exception) {
}
@Override
public void onResponse(@NonNull IoTRequest request, @NonNull IoTResponse response) {
DeviceListResp rsp = (DeviceListResp) response.getData();
if (rsp == null) return;
List<DeviceInfo> deviceList = rsp.getData();
}
});
}
修改设备昵称
String iotId= "设备ID";
String nickName= "名称";
UserDeviceMgr.setDeviceNickname(iotId, nickName, new IoTCallback() {
@Override
public void onFailure(@Nullable IoTRequest request, @NonNull IoTSDKError exception) {
showToast("修改设备昵称失败");
}
@Override
public void onResponse(@NonNull IoTRequest request, @NonNull IoTResponse response) {
showToast("修改设备昵称成功");
}
});
设备缩略图
使用场景:设备列表展示界面,当设备处于列表可见区域时调用
package com.polaris.iot.appsdk.libuserdevicemgr
/**
* 设备缩略图管理
*/
object DeviceThumbnailMgr{
/**
* 获取设备直播缩略图
*
* @param deviceInfo [DeviceInfo]设备信息,设备列表获取
* @param listener 获取结果监听
*/
@JvmStatic
fun getLiveThumbnail(deviceInfo: DeviceInfo, listener: OnResultListener<ThumbnailInfo>)
}
示例
import com.polaris.iot.appsdk.libuserdevicemgr.model.ThumbnailInfo
DeviceInfo deviceInfo;
DeviceThumbnailMgr.getLiveThumbnail(deviceInfo, new OnResultListener<>() {
@Override
public void onError(@NonNull IoTSDKError error) {
}
@Override
public void onResult(ThumbnailInfo result) {
if (!holder.ivDeviceImg.getTag().equals(result.getIotId())) {
return;
}
runOnUiThread(() -> {
Glide.with(DeviceListActivity.this).load(result.getDownloadUrl())
.placeholder(holder.ivDeviceImg.getDrawable())
.error(R.drawable.device_default)
.into(holder.ivDeviceImg);
});
}
});
设备配置
com.polaris.iot.appsdk.libuserdevicemgr.DeviceEntityMgr
配置项 DeviceEntityEnum
package com.polaris.iot.appsdk.libuserdevicemgr.enums
enum class DeviceEntityEnum{
/**
*消息推送设置
*/
MSG_PUSH_SETTING
}
消息通知计划
/**
* 推送计划
*
* @property start 开始时间,utc时间,秒
* @property end 结束时间,utc时间,秒 (end时间应始终大于start时间,跨天的时候,end为第二天的时间)
* @property wk 对应的值仅在"rpt"为2时有效,存在重复设置值:SUN:0x0001, MON:0x0002, TUE:0x0004, WED:0x0008, THU:0x0010, FRI:0x0020, SATU:0x0040,支持按位或操作
* @property rpt 重复类型,0:执行一次 1:每天重复 2:每周重复 3:每月重复 (目前支持1和2)
* @property sta 推送关闭计划状态 1表示状态开,0表示状态关
*/
data class MsgPushSettingSchedule(
var start: Int,
var end: Int,
var wk: Int,
var rpt: Int = 2,
var sta: Int = 1,
) : Serializable {
constructor(start: Int, end: Int, wk: Int) : this(start, end, wk, 2, 1)
}
/**
* 推送设置
*
* @property sch 推送关闭计划列表
* @property sta 是否接收推送消息
* @property img 是否推送图片
* @property interval 推送间隔 单位:秒 0不限
*/
data class MsgPushSetting(
var sch: List<MsgPushSettingSchedule> = listOf(),
var sta: Int = 1,
var img: Int = 0
) : Serializable {
//版本要求:v1.4.1
var interval: Int = 0
}
获取设备配置
/**
* 获指定配置项
*
* @param iotId 设备ID
* @param entityEnum 配置项
* @param listener 回调
*/
@JvmStatic
fun getDeviceEntity(iotId: String, entityEnum: DeviceEntityEnum, listener: OnResultListener<String?>)
示例
DeviceEntityMgr.getDeviceEntity(mIotId, DeviceEntityEnum.MSG_PUSH_SETTING, new OnResultListener<String>() {
@Override
public void onResult(String result) {
mMsgNotifySetting = JsonUtils.parseJson(result, MsgPushSetting.class);
initSettingView();
hideLoading();
}
@Override
public void onError(@NonNull IoTSDKError error) {
initSettingView();
hideLoading();
}
});
设置设备配置
/**
* 设置设备配置项
*
* @param iotId 设备ID
* @param entityEnum 设置项
* @param value 设置内容
* @param ioTCallback 回调
*/
@JvmStatic
fun setDeviceEntity(iotId: String, entityEnum: DeviceEntityEnum, value: String, ioTCallback: IoTCallback?)
示例
DeviceEntityMgr.setDeviceEntity(
mIotId,
DeviceEntityEnum.MSG_PUSH_SETTING,
JsonUtils.toJsonString(mMsgNotifySetting),
new IoTCallback() {
@Override
public void onFailure(@Nullable IoTRequest request, @NonNull IoTSDKError exception) {
showToast(R.string.error_api_failed);
finish();
}
@Override
public void onResponse(@NonNull IoTRequest request, @NonNull IoTResponse response) {
finish();
}
});
云台预置位
收藏常看的云台位置,方便快速转动设备镜头至相应位置
class PTZPresetMgr(private val mIotId: String) {
/**
* 获取设备预置位列表
*
* @param onResultListener [OnResultListener]<List<[PTZPresetRspItem]>>
*/
fun getPresetList(onResultListener: OnResultListener<List<PTZPresetRspItem>>)
/**
* 添加预置位
*
* @param reqParams [PTZPresetReq]
* @param onResultListener [OnResultListener]<[PTZPresetRspItem]>
*/
fun addPreset(reqParams: PTZPresetReq, onResultListener: OnResultListener<PTZPresetRspItem>)
/**
* 删除预置位
*
* @param item 列表返回的预置位项[PTZPresetRspItem]
* @param onResultListener [OnResultListener]<Boolean>
*/
fun removePreset(item: PTZPresetRspItem, onResultListener: OnResultListener<Boolean>)
/**
* 更新预置位名称 如果ptz信息或图片变化请删除重新添加
*
* @param item 列表返回的预置位项[PTZPresetRspItem]
* @param onResultListener [OnResultListener]<Boolean>
*/
fun updatePreset(item: PTZPresetRspItem, onResultListener: OnResultListener<Boolean>)
}
构建对象
private var mPTZPresetMgr: PTZPresetMgr? = null
val iotId = "设备ID"
mPtzPresetMgr = PTZPresetMgr(iotId)
获取设备预置位列表
mPtzPresetMgr.getPresetList(object : OnResultListener<List<PTZPresetRspItem>> {
override fun onResult(result: List<PTZPresetRspItem>) {
IoTLogger.d(TAG, "getPresetList result=${JsonUtils.toJsonString(result)}")
mPresetListAdapter?.setDataList(result)
}
override fun onError(error: IoTSDKError) {
}
})
PTZPresetRspItem
/**
* 预置位列表项
*
* @property ptz 预置位信息
* @property name 预置位名称
* @property picId 预置位图片ID
* @property picUrl 预置位图片地址
* @constructor Create empty P t z preset rsp item
*/
data class PTZPresetRspItem(
val ptz: String,
var name: String?,
val picId: String?,
val picUrl: String?,
)
添加预置位
-
通过物模型或其它途径获取设备当前云台位置信息
-
用户输入位置名称
-
获取设备当前位置画面(可截图播放器当前直播画面)
val ptzPosition = "获取到的当前云台位置信息"
val name="常看位置"
val bitmap: Bitmap? = null //当前画面,可从播放器截图
val onResultListener = object : OnResultListener<PTZPresetRspItem> {
override fun onResult(result: PTZPresetRspItem) {
binding.popPresetListView.addListItem(result)
hideLoading()
}
override fun onError(error: IoTSDKError) {
IoTLogger.e(TAG, "error", error)
hideLoading()
showToast(R.string.operate_failed)
}
}
mPTZPresetMgr?.addPreset(PTZPresetReq(ptzPosition, name, bitmap), onResultListener)
PTZPresetReq
/**
* 预置位保存参数 预置位名称与截图至少有一个
*
* @property ptz 预置位信息
* @property name 预置位名称 可选
* @property bitmap 预置位截图 可选
* @constructor Create empty P t z preset req
*/
data class PTZPresetReq(
var ptz: String,
var name: String?,
var bitmap: Bitmap?,
) {
constructor(ptz: String, name: String) : this(ptz, name, null)
constructor(ptz: String, bitmap: Bitmap) : this(ptz, null, bitmap)
}
删除预置位
传入列表中获取数据,删除指定预置位
private fun doRemovePreset(data: PTZPresetRspItem, pos: Int) {
mPTZPresetMgr.removePreset(data, object : OnResultListener<Boolean> {
override fun onResult(result: Boolean) {
removeItemAt(pos)
}
override fun onError(error: IoTSDKError) {
Toast.makeText(mContext, mContext.getString(R.string.operate_failed) + "[${error.getCode()}]", Toast.LENGTH_SHORT).show()
}
})
}
修改预置位名称
更新预置位名称 如果ptz信息或图片变化请删除重新添加
val item: PTZPresetRspItem = getItem(0)
item.name = "新的位置名称"
mPTZPresetMgr.updatePreset(item, object : OnResultListener<Boolean> {
@SuppressLint("NotifyDataSetChanged")
override fun onResult(result: Boolean) {
if (result) {
notifyDataSetChanged()
} else {
item.name = oldValue
Toast.makeText(mContext, mContext.getString(R.string.operate_failed), Toast.LENGTH_SHORT).show()
}
}
override fun onError(error: IoTSDKError) {
item.name = oldValue
Toast.makeText(mContext, mContext.getString(R.string.operate_failed) + "[${error.getCode()}]", Toast.LENGTH_SHORT).show()
}
})