跳到主要内容

设备分享

更新时间:2024-11-29 13:53:36

用户之间分享设备

import com.polaris.iot.appsdk.libapiclient.callback.IoTCallback
import com.polaris.iot.appsdk.libuserdevicemgr.model.GenerateShareQrCodeRsp
import com.polaris.iot.appsdk.libuserdevicemgr.model.GetShareNoticeListReq
import com.polaris.iot.appsdk.libuserdevicemgr.model.GetShareNoticeListRsp
import com.polaris.iot.appsdk.libuserdevicemgr.model.GetSharedUserListReq
import com.polaris.iot.appsdk.libuserdevicemgr.model.GetSharedUserListRsp
import com.polaris.iot.appsdk.libuserdevicemgr.model.QueryShareRecordByBatchReq
import com.polaris.iot.appsdk.libuserdevicemgr.model.QueryShareRecordByBatchRsp
import com.polaris.iot.appsdk.libuserdevicemgr.model.ScanBindByShareQrcodeRsp
import com.polaris.iot.appsdk.libuserdevicemgr.model.ShareDevicesReq

/**
* 设备分享
*/
object DeviceShareMgr {
/**
* 生成分享用的二维码(30min有效)
*
* @param iotIdList 要分享的设备列表。一次最多20
* @param permissionList 权限列表,live:直播,control:设备控制,record:录像回看,ptz:云台控制,voiceIntercom:语音对讲,setting:高级设置,notification:消息通知
* @param ioTCallback [GenerateShareQrCodeRsp]
*/
fun generateShareQrCode(iotIdList: List<String>, permissionList: List<String>, ioTCallback: IoTCallback)

/**
* 通过扫描二维码绑定设备(分享设备)
*
* @param qrKey 设备ID生成的二维码内容信息
* @param ioTCallback [ScanBindByShareQrcodeRsp]
*/
fun scanBindByShareQrcode(qrKey: String, ioTCallback: IoTCallback)


/**
* 设备分享给指定的用户
*
* @param shareDevicesReq [ShareDevicesReq]
* @param ioTCallback [ShareDevicesRsp]
*/
fun shareDevices(shareDevicesReq: ShareDevicesReq, ioTCallback: IoTCallback)

/**
* 发起者取消分享
*
* @param recordIdList 分享记录列表
* @param ioTCallback
*/
fun cancelShare(recordIdList: List<Long>, ioTCallback: IoTCallback)

/**
* 被分享者同意或拒绝分享
*
* @param recordIdList 分享记录列表
* @param agree 0(表示不同意);1(表示同意)。
* @param ioTCallback
*/
fun confirmShare(recordIdList: List<Long>, agree: Int, ioTCallback: IoTCallback)

/**
* 获取分享通知列表
*
* @param getShareNoticeListReq [GetShareNoticeListReq]
* @param ioTCallback [GetShareNoticeListRsp] 返回回调
*/
fun getShareNoticeList(getShareNoticeListReq: GetShareNoticeListReq, ioTCallback: IoTCallback)

/**
* 查询设备分享记录
*
* @param queryShareRecordByBatchReq [QueryShareRecordByBatchReq]
* @param ioTCallback [QueryShareRecordByBatchRsp] 返回回调
*/
fun queryShareRecordByBatch(queryShareRecordByBatchReq: QueryShareRecordByBatchReq, ioTCallback: IoTCallback)

/**
* 分享权限修改
*
* @param recordId 分享记录ID
* @param permissionList 权限列表,live:直播,control:设备控制,record:录像回看,ptz:云台控制,voiceIntercom:语音对讲,setting:高级设置,notification:消息通知
* @param ioTCallback 返回回调
*/
fun setSharePermission(recordId: Long, permissionList: List<String>, ioTCallback: IoTCallback)

/**
* 查询用户下设备当前被分享用户(初始化和接受状态)
*
* @param getSharedListReq [GetSharedUserListReq]
* @param ioTCallback [GetSharedUserListRsp] 返回回调
*/
fun getSharedUserList(getSharedListReq: GetSharedUserListReq, ioTCallback: IoTCallback)

/**
* 查询用户下设备的分享数量(初始化和接受状态)
*
* @param getSharedCountReq [GetSharedCountReq]
* @param ioTCallback [GetSharedCountRsp] 返回回调
*/
fun getSharedCountList(getSharedCountReq: GetSharedCountReq, ioTCallback: IoTCallback)

}

生成分享用的二维码

生成的二维码30分钟有效

 /**
* 生成分享用的二维码(30min有效)
*
* @param iotIdList 要分享的设备列表。一次最多20
* @param permissionList 权限列表,live:直播,control:设备控制,record:录像回看,ptz:云台控制,voiceIntercom:语音对讲,setting:高级设置,notification:消息通知
* @param ioTCallback [GenerateShareQrCodeRsp]
*/
fun generateShareQrCode(iotIdList: List<String>, permissionList: List<String>, ioTCallback: IoTCallback)

示例

List<String> iotIdList;
List<String> permissionList;
DeviceShareMgr.generateShareQrCode(iotIdList permissionList), new IoTCallback() {
@Override
public void onFailure(@Nullable IoTRequest request, @NonNull IoTSDKError exception) {

showToast(R.string.tip_share_qrcode_failed);
hideLoading();
}

@Override
public void onResponse(@NonNull IoTRequest request, @NonNull IoTResponse response) {
hideLoading();
GenerateShareQrCodeRsp rsp = (GenerateShareQrCodeRsp) response.getData();
if (rsp == null) {
showToast(R.string.tip_share_qrcode_failed);
return;
}
if (rsp.getFailList() != null && !rsp.getFailList().isEmpty()) {
StringBuilder sb = new StringBuilder("存在不可分享设备:");
for (ShareFailedDevice failDevice : rsp.getFailList()) {
sb.append("\n").append(failDevice.getIotId()).append("\n").append(failDevice.getCode()).append("\n");
}
showAlert(sb.toString());
}
runOnUiThread(() -> {
ImageButton ibRefresh = findViewById(R.id.ibRefresh);
ibRefresh.setVisibility(View.GONE);
ImageView ivQRCode = findViewById(R.id.ivQRCode);
Bitmap bitmap = QRCodeUtil.createQRCodeBitmap(JsonUtils.toJsonString(rsp), 1000, 1000);
ivQRCode.setImageBitmap(bitmap);
ivQRCode.setImageAlpha(255);


});

}
});

通过扫描二维码绑定设备

/**
* 通过扫描二维码绑定设备(分享设备)
*
* @param qrKey 设备ID生成的二维码内容信息
* @param ioTCallback [ScanBindByShareQrcodeRsp]
*/
fun scanBindByShareQrcode(qrKey: String, ioTCallback: IoTCallback)

示例

private void acceptShareDevice(String qrKey) {
DeviceShareMgr.scanBindByShareQrcode(qrKey, new IoTCallback() {
@Override
public void onFailure(@Nullable IoTRequest request, @NonNull IoTSDKError exception) {
showToast(R.string.tip_share_device_failed);
}

@Override
public void onResponse(@NonNull IoTRequest request, @NonNull IoTResponse response) {
showToast(R.string.tip_share_device_success);
((ShareListFragment) mSectionsPagerAdapter.getItem(1)).getShareList();
}
});
}

设备分享给指定的用户

/**
* 设备分享给指定的用户
*
* @param shareDevicesReq [ShareDevicesReq]
* @param ioTCallback [ShareDevicesRsp]
*/
fun shareDevices(shareDevicesReq: ShareDevicesReq, ioTCallback: IoTCallback)

示例

private void doShareDevice(List<String> permissionList) {
String account = binding.etShareAccount.getText().toString().trim();
String accountType = account.contains("@") ? "EMAIL" : "MOBILE";

ShareDevicesReq req = new ShareDevicesReq(Arrays.stream(mIotIdList).collect(Collectors.toList()), account, accountType, permissionList, null);
DeviceShareMgr.shareDevices(req, new IoTCallback() {
@Override
public void onFailure(@Nullable IoTRequest request, @NonNull IoTSDKError exception) {
showToast(R.string.tip_share_device_failed);
}

@Override
public void onResponse(@NonNull IoTRequest request, @NonNull IoTResponse response) {
ShareDevicesRsp rsp = (ShareDevicesRsp) response.getData();
if (rsp == null) {
showToast(R.string.tip_share_device_failed);
return;
}
if (rsp.getFailList() == null || rsp.getFailList().size() < mIotIdList.length) {
showToast(R.string.tip_share_device_success);
}
if (rsp.getFailList() != null && !rsp.getFailList().isEmpty()) {
StringBuilder sb = new StringBuilder("存在分享失败的设备:");
for (ShareFailedDevice failDevice : rsp.getFailList()) {
sb.append("\n").append(failDevice.getIotId()).append("\n").append(failDevice.getCode()).append("\n");
}
showAlert(sb.toString());
} else {
finish();
}
}
});
}

发起者取消分享

/**
* 发起者取消分享
*
* @param recordIdList 分享记录列表
* @param ioTCallback
*/
fun cancelShare(recordIdList: List<Long>, ioTCallback: IoTCallback)

示例

val list = listOf(item.recordId)
DeviceShareMgr.cancelShare(list, object : IoTCallback {
override fun onFailure(request: IoTRequest?, exception: IoTSDKError) {
mContext.showToast(mContext.getString(R.string.error_api_failed) + "[${exception.getCode()}]")
}

override fun onResponse(request: IoTRequest, response: IoTResponse) {
getDataList().removeAt(i);
notifyDataSetChanged()
}

})

被分享者同意或拒绝分享

/**
* 被分享者同意或拒绝分享
*
* @param recordIdList 分享记录列表
* @param agree 0(表示不同意);1(表示同意)。
* @param ioTCallback
*/
fun confirmShare(recordIdList: List<Long>, agree: Int, ioTCallback: IoTCallback)

示例

btnRefuse.setOnClickListener {
//被分享者拒绝
DeviceShareMgr.confirmShare(list, 0, object : IoTCallback {
override fun onFailure(request: IoTRequest?, exception: IoTSDKError) {
mContext.showToast(mContext.getString(R.string.error_api_failed) + "[${exception.getCode()}]")
}

override fun onResponse(request: IoTRequest, response: IoTResponse) {
deviceItem.status = DeviceShareStatusEnum.REFUSE.status
expandDevices(itemViewHolder, shareDevices);
}
})
}

btnAccept.setOnClickListener {
//被分享者取消同意志
DeviceShareMgr.confirmShare(list, 1, object : IoTCallback {
override fun onFailure(request: IoTRequest?, exception: IoTSDKError) {
mContext.showToast(mContext.getString(R.string.error_api_failed) + "[${exception.getCode()}]")
}

override fun onResponse(request: IoTRequest, response: IoTResponse) {
deviceItem.status = DeviceShareStatusEnum.ACCEPT.status
expandDevices(itemViewHolder, shareDevices);
}
})
}

获取分享通知列表

/**
* 获取分享通知列表
*
* @param getShareNoticeListReq [GetShareNoticeListReq]
* @param ioTCallback [GetShareNoticeListRsp] 返回回调
*/
fun getShareNoticeList(getShareNoticeListReq: GetShareNoticeListReq, ioTCallback: IoTCallback)

示例

public void getShareList() {
GetShareNoticeListReq req = new GetShareNoticeListReq(1, 200, "BATCH");
DeviceShareMgr.getShareNoticeList(req, new IoTCallback() {
@Override
public void onFailure(@Nullable IoTRequest request, @NonNull IoTSDKError exception) {
((BaseActivity) getActivity()).showToast(R.string.error_api_failed);
}

@Override
public void onResponse(@NonNull IoTRequest request, @NonNull IoTResponse response) {
GetShareNoticeListRsp rsp = (GetShareNoticeListRsp) response.getData();
mShareListAdapter.setDataList(rsp.getData());
}
});
}

查询设备分享记录

/**
* 查询设备分享记录
*
* @param queryShareRecordByBatchReq [QueryShareRecordByBatchReq]
* @param ioTCallback [QueryShareRecordByBatchRsp] 返回回调
*/
fun queryShareRecordByBatch(queryShareRecordByBatchReq: QueryShareRecordByBatchReq, ioTCallback: IoTCallback)

示例

DeviceShareMgr.queryShareRecordByBatch(QueryShareRecordByBatchReq(item.batchId, 1, 200), object : IoTCallback {
override fun onFailure(request: IoTRequest?, exception: IoTSDKError) {
mContext.showToast(mContext.getString(R.string.error_api_failed) + "[${exception.getCode()}]")
}

override fun onResponse(request: IoTRequest, response: IoTResponse) {
if (itemViewHolder.llShareDeviceWrapper.tag != item.batchId) return;
val rsp = response.data as QueryShareRecordByBatchRsp;
item.shareDevices = rsp.data;
if (item.shareDevices != null) {
expandDevices(itemViewHolder, item.shareDevices!!)
}
}
})

分享权限修改

仅当分享记录状态为初始化或接受状态时可操作

/**
* 分享权限修改
*
* @param recordId 分享记录ID
* @param permissionList 权限列表,live:直播,control:设备控制,record:录像回看,ptz:云台控制,voiceIntercom:语音对讲,setting:高级设置,notification:消息通知
* @param ioTCallback 返回回调
*/
fun setSharePermission(recordId: Long, permissionList: List<String>, ioTCallback: IoTCallback)

示例

DeviceShareMgr.setSharePermission(item.recordId, permissionList, object : IoTCallback {
override fun onFailure(request: IoTRequest?, exception: IoTSDKError) {
(mContext).showToast(mContext.getString(R.string.error_api_failed) + "[${exception.getCode()}]")
}

override fun onResponse(request: IoTRequest, response: IoTResponse) {
item.permissionList = permissionList.toList();
notifyDataSetChanged()
}
})

查询用户下设备当前被分享用户

仅当分享记录为初始化和接受状态的用户会返回

/**
* 查询用户下设备当前被分享用户(初始化和接受状态)
*
* @param getSharedListReq [GetSharedUserListReq]
* @param ioTCallback [GetSharedUserListRsp] 返回回调
*/
@JvmStatic
fun getSharedUserList(getSharedListReq: GetSharedUserListReq, ioTCallback: IoTCallback)

查询用户下设备的分享数量

仅返回初始化和接受状态记录的数量,限制最大分享次数

private void getSharedCountList() {
GetSharedCountReq req = new GetSharedCountReq(1, 200, null);
DeviceShareMgr.getSharedCountList(req, new IoTCallback() {
@Override
public void onFailure(@Nullable IoTRequest request, @NonNull IoTSDKError exception) {
((BaseActivity) requireActivity()).showToast(R.string.error_api_failed);
}

@Override
public void onResponse(@NonNull IoTRequest request, @NonNull IoTResponse response) {
GetSharedCountRsp rsp = (GetSharedCountRsp) response.getData();
assert rsp != null;
mMaxShareCount = rsp.getMaxShareCount();
mSharedCountList = rsp.getItems();
initDeviceList();
}
});
}