更新时间:2024-11-18 11:33:11下载pdf
涂鸦设备详情 UI 业务包支持以下功能:
在 Android Studio 中建立您的工程,接入智能生活 App SDK,并完成业务包 框架接入。
主工程的 assets
目录下,放入 deviceDetail.json
以及 [deviceEditConfigList.json
] 配置文件。具体配置入下:
[
{
"name": "headerSection",
"items": [
{
"cellType": "header"
},
{
"cellType": "device_info"
},
{
"cellType": "net_setting"
},
{
"cellType": "group_edit_devices"
}
]
},
{
"name": "offLineWarnSection",
"header": {
"cellType": "section_off_line_warn"
},
"items": [
{
"cellType": "off_line_warn"
}
]
},
{
"name": "otherSection",
"header": {
"cellType": "section_other"
},
"items": [
{
"cellType": "bind_multi_control_link"
},
{
"cellType": "group_create"
},
{
"cellType": "help_and_feedback"
},
{
"cellType": "add_icon_to_home_screen"
},
{
"cellType": "show_infrared_gateway_sub_device"
},
{
"cellType": "check_device_network"
},
{
"cellType": "check_firmware_update"
},
{
"cellType": "c_test_insert"
},
{
"cellType": "c_test_async_insert"
}
]
},
{
"name": "footerSection",
"header": {
"cellType": "device_detail_empty"
},
"items": [
{
"cellType": "footer"
}
],
"margin": {
"top": 16
}
}
]
deviceEditConfigList.json
{
"deviceEdit": [
{
"name": "deviceEdit",
"items": [
{
"cellType": "dev_icon"
},
{
"cellType": "set_icon"
},
{
"cellType": "set_name"
},
{
"cellType": "set_position"
}
]
}
]
}
deviceDetail
的 type
的顺序会影响设备详情页子功能展示的顺序。如果移除某个 type
,则相应也会移除设备详情页子功能。devBaseInfo
的 type
的顺序会影响设备基础信息子功能展示的顺序。如果移除某个 type
,则相应也会移除功能入口。deviceDetail type |
设备功能 |
---|---|
header | 查看修改设备图标、名称、位置 |
device_info | 显示设备信息 |
net_setting | 显示设备备用网络 |
group_edit_devices | 群组设备管理,您需要额外接入 群组管理 UI 业务包 |
off_line_warn | 设备离线提醒 |
section_other | 分区头,无实际功能 |
bind_multi_control_link | 多控关联 |
group_create | 创建群组,您需要额外接入 群组管理 UI 业务包 |
help_and_feedback | 常见问题与反馈,您需要额外接入 常见问题与反馈 UI 业务包 |
check_firmware_update | 检查设备固件升级,您需要额外接入 设备固件 OTA 升级 UI 业务包 |
show_infrared_gateway_sub_device | 展示遥控器 |
device_detail_empty | 一个空的 view ,无实际功能 |
footer | 移除设备 |
deviceEdit type |
设备功能 |
---|---|
dev_icon | 设备图标 |
set_icon | 图标 item |
set_name | 名称 item |
set_position | 位置 item |
dependencies {
implementation 'com.tuya.smart:tuyasmart-bizbundle-panelmore:4.2.0-33'
}
参数说明
参数 | 说明 |
---|---|
extra_panel_dev_id | 设备 ID |
extra_panel_name | 设备名称 |
extra_panel_group_id | 群组 ID |
示例代码
UrlBuilder urlBuilder = new UrlBuilder(PanelMoreActivity.this, "panelMore");
String devId = edt.getText().toString().trim();
DeviceBean deviceBean = TuyaHomeSdk.getDataInstance().getDeviceBean(devId);
Bundle bundle = new Bundle();
bundle.putString("extra_panel_dev_id",devId);
bundle.putString("extra_panel_name",deviceBean.getName());
bundle.putLong("extra_panel_group_id",groupId);
urlBuilder.putExtras(bundle);
UrlRouter.execute(urlBuilder);
在 configList.json
文件的 deviceDetail
插入自定义 type
。
type
的值必须以 c_
开头,例如 c_test_insert
。
[
{
"name": "headerSection",
"items": [
{
"cellType": "header"
},
{
"cellType": "device_info"
},
{
"cellType": "net_setting"
},
{
"cellType": "group_edit_devices"
}
]
},
{
"name": "offLineWarnSection",
"header": {
"cellType": "section_off_line_warn"
},
"items": [
{
"cellType": "off_line_warn"
}
]
},
{
"name": "otherSection",
"header": {
"cellType": "section_other"
},
"items": [
{
"cellType": "bind_multi_control_link"
},
{
"cellType": "group_create"
},
{
"cellType": "help_and_feedback"
},
{
"cellType": "add_icon_to_home_screen"
},
{
"cellType": "show_infrared_gateway_sub_device"
},
{
"cellType": "check_device_network"
},
{
"cellType": "check_firmware_update"
},
{
"cellType": "c_test_insert"
},
{
"cellType": "c_test_async_insert"
}
]
},
{
"name": "footerSection",
"header": {
"cellType": "device_detail_empty"
},
"items": [
{
"cellType": "footer"
}
],
"margin": {
"top": 16
}
}
]
实现 com.tuya.smart.archer.api.cell.IArcherCell
或者 com.tuya.smart.archer.api.AbsBaseArcherCell
。
接口说明
override fun onCreate(context: Context?) {}
参数说明
参数 | 说明 |
---|---|
context | 安卓 context |
实现为 AbsBaseArcherCell
,必须 getContainerControl().updateCell(this)
触发更新逻辑。否则,不会调用 show()。
实现为 IArcherCell
,无法调用 getContainerControl().updateCall(this)
,show()
方法会被自动调用。
override suspend fun show(): Boolean {}
点击事件可在 onBindView
中实现。
override fun onCreateView(parent: ViewGroup): View? {}
override fun onBindView(view: View): ITYBaseData?{}
在 tyarchercell_config
中配置当前的 class
。
{
"name": "c_test_insert",
"type": 1,
"clazz": "com.tuya.smart.bizubundle.panelmore.demo.CTestInsertCell"
},
{
"name": "c_test_async_insert",
"type": 1,
"clazz": "com.tuya.smart.bizubundle.panelmore.demo.CTestAsyncInsertCell"
}
参数 | 说明 |
---|---|
name | deviceDetail.json 中配置的 cellType |
type | item 的类型:1 表示 item ,2 表示 header 。当前 section 中存在 item 显示,header 必显示 |
clazz | item 的 class |
val service:IPluginDeviceDetailInfoService? = MicroServiceManager.getInstance()
.findServiceByInterface(IPluginDeviceDetailInfoService::class.java.name)
val deviceId = service?.getCurrentDevId();
val groupId = service?.getCurrentGroupId();
val absDevBaseInfoService: AbsDevBaseInfoService? by lazy {
MicroServiceManager.getInstance()
.findServiceByInterface(AbsDevBaseInfoService::class.java.name)
}
val isAdmin = absDevBaseInfoService.getIsAdmin()
添加主屏幕需要您自行开发跳转方式,并确保当前 App 已拥有创建快捷方式的权限。具体实现步骤如下:
定义 activity-alias
,将入口 activity 启动模式设置为 singleTask
。
<activity-alias
android:name="com.tuya.smart.hometab.activity.shortcut"
android:exported="true"
android:targetActivity=".MainActivity"> //此处为入口需跳转到activity
实现 App 模块中的 RouterPresenter
路由解析的部分即可。
if (PINNED_SHORTCUT_ALIAS.equals(intent.getComponent().getClassName())) {
String url = null;
try {
url = intent.getStringExtra("url");
} catch (Throwable t) {
LogUtil.e(TAG, "get url error", t);
}
L.d(TAG, "schemeJump: " + url);
if (TextUtils.isEmpty(url)) {
return null;
}
if (isInnerRouter(url)) {
return new RouterPresenter(url, intent.getExtras());
}
return null;
}
return null;
...
重写 onNewIntent
方法,调用 Router 解析路由。
在 onResume
中执行路由跳转逻辑。
接口说明
/**
* 获取红外子设备是否展示在首页
*
* @param homeId
* @param devId
* @return
*/
public abstract boolean getInfraredSubDevDisplaySettings(long homeId, String devId);
参数说明
参数 | 说明 |
---|---|
homeId | 家庭 ID |
devId | 设备 ID |
接口说明
/**
* 获取红外设备显示当前逻辑
* @param homeId
* @param devId
* @return
*/
public abstract boolean getInfraredDevDisplaySettings(long homeId, String devId);
参数说明
参数 | 说明 |
---|---|
homeId | 家庭 ID |
devId | 红外设备的 ID |
接口说明
/**
* 注册红外子设备(虚拟设备)显示设置变更监听
*
* @param listener
*/
public abstract void registerInfraredSubDevDisplaySettingsListener(OnInfraredSubDevDisplaySettingsListener listener);
/**
* 反注册红外子设备显示设置变更监听
*
* @param listener
*/
public abstract void unregisterInfraredSubDevDisplaySettingsListener(OnInfraredSubDevDisplaySettingsListener listener);
参数说明
参数 | 说明 |
---|---|
homeId | 家庭 ID |
devId | 红外设备的 ID |
示例代码
IPluginInfraredSubDevDisplayService service = MicroServiceManager.getInstance().findServiceByInterface(IPluginInfraredSubDevDisplayService.class.getName());
service.registerInfraredSubDevDisplaySettingsListener(new OnInfraredSubDevDisplaySettingsListener() {
@Override
public void onDisplaySettingsChanged(Long homeId, String gwId, Boolean shown) {
// 更新设备列表,读取
// gwId 为红外设备 ID
// devId 为红外子设备 ID
// service.getInfraredSubDevDisplaySettings(homeId,devId) 读取当前的红外子设备是否需要显示到首页
Log.e(TAG, " changed " + "homeId: " + homeId + " devId" + gwId + " show" + shown);
Toast.makeText(DeviceDetailActivity.this, "infrared Changed", Toast.LENGTH_LONG).show();
}
@Override
public void onDisplaySettingsRemoved(Long homeId, String gwId) {
Log.e(TAG, " removed " + "homeId: " + homeId + " devId" + gwId);
Toast.makeText(DeviceDetailActivity.this, "infrared removed", Toast.LENGTH_LONG).show();
}
});
废弃 API | 替代说明 |
---|---|
PanelMoreItemClickService.devClickItem | 实现 IArcherCell 或者 AbsArcherCell |
PanelMoreItemClickService.devClickItem | 实现 IArcherCell 或者 AbsArcherCell |
PanelMoreMenuService.insertDevMenuItemAsync | 使用上述说明实现新 cell |
PanelMoreMenuService.insertDevMenuItem/insertDevMenuItemAsync/insertDevMenuItem/ | 使用上述说明实现新 cell |
PanelMoreInfraredSubDevDisplayService | IPluginInfraredSubDevDisplayService |
该内容对您有帮助吗?
是意见反馈该内容对您有帮助吗?
是意见反馈