更新时间:2023-05-22 06:38:28下载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:1.0.0-cube'
}
参数说明
| 参数 | 说明 |
|---|---|
| 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 |
该内容对您有帮助吗?
是意见反馈该内容对您有帮助吗?
是意见反馈