更新时间:2024-04-24 03:47:32下载pdf
设备群组业务能力包括:
在涂鸦体系下,只有当前用户权限是 家庭管理员及以上 且 设备支持创建群组 时,才能实现设备群组业务。
设备是否支持群组
// 查看设备是否支持创建群组
DeviceBean deviceBean = ThingGroupCoreKit.INSTANCE.getDeviceBean(deviceId);
boolean supportGroup = deviceBean.isSupportGroup();
是否为家庭管理员及以上
查看用户的权限是否为家庭管理员及以上。接入 家庭成员管理业务拓展 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?) {
}
})
当满足上述条件之后,在实现设备群组业务之前,需要根据设备 ID 或群组 ID 完成初始化工作,并获取群组业务管理类 ThingGroupBizManager
。后续所有群组业务接口的调用,均通过该管理类来完成。
// 已存在的群组,通过 groupId 进行初始化
val initBuilder = GroupInitBuilder.Builder()
.setGroupId(groupId)
.build()
// 未创建群组之前,通过 devcieId 进行初始化
val initBuilder = GroupInitBuilder.Builder()
.setDevId(deviceId)
.build()
val thingGroupBizManager = ThingGroupBizKit.getGroupBizManager(homeId,initBuilder)
fetchDeviceList()
和 createGroup()
接口之后创建了一个群组。对该群组的编辑和和删除,需要通过 groupId
重新初始化一个管理类,调用 updateGroup()
和 dismissGroup()
来完成。否则会出现异常。完成初始化并获取 ThingGroupBizManager
之后,就可以调用 fetchDeviceList()
接口,查询可与当前群组或设备组成群组的设备列表。
val operateBuilder = GroupOperateBuilder.Builder()
.setQueryDeviceCallback(object : QueryDeviceCallback {
override fun result(list: List<GroupInfo>) {
/**
*
* 通过群组 ID 查询到的设备列表:包含已在群组中的设备和可添加到群组的设备。
* 通过 GroupInfo 中的 checked 字段区分。
*
* 通过设备 ID 查询到的设备列表:包含其本身和可与当前设备组成群组的设备
*
*/
}
})
.setFailureCallback(object : FailureCallback {
override fun onError(
errorCode: String?,
errorMessage: String?,
groupId: Long,
failDevices: List<GroupResult>?
) {
}
})
.build()
thingGroupBizManager?.fetchDeviceList(operateBuilder)
在调用 fetchDeviceList()
接口,获取可组成群组的设备列表之后,可以通过合理的 UI 和交互设计,让用户自行选择将哪些设备添加到一个群组中。当然,选中设备列表之后,还需要给群组一个名称。然后调用 createGroup()
接口,完成群组的创建。
val operateBuilder = GroupOperateBuilder.Builder()
.setGroupName("群组 1")
.setAllSelectDeviceList(selectedDevice)
.setSuccessCallback(object : SuccessCallback {
override fun result(groupId: Long, failDevices: List<GroupResult>?) {
// 创建成功,获取群组 ID
}
})
.setProcessCallback(object : ProcessCallback {
override fun result(process: Int, size: Int) {
}
})
.setFailureCallback(object : FailureCallback {
override fun onError(
errorCode: String?,
errorMessage: String?,
groupId: Long,
failDevices: List<GroupResult>?
) {
}
})
.build()
thingGroupBizManager?.createGroup(operateBuilder)
成功地创建群组并获取群组 ID 之后,就能对群组进行编辑了。需要注意的是,要重新通过群组 ID 进行初始化,拿到新的 ThingGroupBizManager
对象,才可以去增减群组里的设备。
// 已存在的群组,通过 groupId 进行初始化
val initBuilder = GroupInitBuilder.Builder()
.setGroupId(groupId)
.build()
val thingGroupBizManager = ThingGroupBizKit.getGroupBizManager(homeId,initBuilder)
// 编辑群组里的设备时,不需要传入群组名称,只需传入重新选择之后的设备 ID 列表即可。
val operateBuilder = GroupOperateBuilder.Builder()
.setAllSelectDeviceList(selectedDevice)
.setSuccessCallback(object : SuccessCallback {
override fun result(groupId: Long, failDevices: List<GroupResult>?) {
// 编辑成功
}
})
.setProcessCallback(object : ProcessCallback {
override fun result(process: Int, size: Int) {
}
})
.setFailureCallback(object : FailureCallback {
override fun onError(
errorCode: String?,
errorMessage: String?,
groupId: Long,
failDevices: List<GroupResult>?
) {
}
})
.build()
thingGroupBizManager?.updateGroup(operateBuilder)
当需要删除一个群组时,同样也是需要通过群组 ID 进行初始化,拿到新的 ThingGroupBizManager
对象,才能删除群组。不过,群组编辑和删除可以用同一个管理类。
// 已存在的群组,通过 groupId 进行初始化,即便在初始化的时候已经传入了。
val initBuilder = GroupInitBuilder.Builder()
.setGroupId(groupId)
.build()
val thingGroupBizManager = ThingGroupBizKit.getGroupBizManager(homeId,initBuilder)
GroupOperateBuilder operateBuilder = new GroupOperateBuilder.Builder()
.setGroupId(groupId)
.setSuccessCallback((groupId, failDevices) -> {
// 群组删除成功
})
.setFailureCallback((errorCode, errorMessage, groupId, failDevices) -> {
})
.build();
thingGroupBizManager?.dismissGroup(operateBuilder)
上述的步骤是按照查增改删的思路一步步完成群组业务的。实际业务开发时,可灵活组合。更多信息,可以参考 业务拓展 SDK Demo 中的 群组业务模块。
该内容对您有帮助吗?
是意见反馈该内容对您有帮助吗?
是意见反馈