更新时间:2024-10-29 06:24:50下载pdf
涂鸦设备详情 UI 业务包提供了以下功能:
在 Android Studio 中建立您的工程,接入智能生活 App SDK,并完成业务包 框架接入。
主工程的 assets
目录下,需放入 deviceDetail.json
、deviceEditConfigList.json
、thingarchercell_config.json
三个配置文件。
有关配置文件的详情内容,可在 GitHub 下载 tuya-ui-bizbundle-android-demo,查看其 devicedetail
模块下的 assets
文件夹中对应的 JSON 文件。以下内容只对该三个配置文件的结构做简单说明:
deviceDetail.json
deviceDetail
的 type
参数的设置顺序会影响设备详情页子功能展示的顺序。如果移除某个 type
,则相应也会移除设备详情页子功能。
以下代码只用于举例说明,完整的文件内容请查看在 GitHub 查看 tuya-ui-bizbundle-android-demo。
[
{
"name": "headerSection",
"items": [
{
"cellType": "header"
},
{
"cellType": "device_info"
}
]
},
{
"name": "otherSection",
"header": {
"cellType": "section_other"
},
"items": [
{
"cellType": "device_from"
},
{
"cellType": "bind_multi_control_link"
},
{
"cellType": "sub_device_migrate"
}
]
},
{
"name": "footerSection",
"header": {
"cellType": "device_detail_empty"
},
"items": [
{
"cellType": "footer"
}
],
"margin": {
"top": 16
}
}
]
参数 | 说明 |
---|---|
name | 分组名称 |
items | 分组下的子项列表,参数 cellType 表示子项名称 |
header | 分组的头部内容 |
footer | 分组的尾部内容 |
margin | 分组之间的间距 |
deviceEditConfigList.json
deviceEditConfigList
的 type
参数的设置顺序会影响设备基础信息子功能展示的顺序。如果移除某个 type
,则相应也会移除功能入口。
{
"deviceEdit": [
{
"name": "deviceEdit",
"items": [
{
"cellType": "dev_icon"
},
{
"cellType": "set_icon"
},
{
"cellType": "set_name"
},
{
"cellType": "set_position"
}
]
}
]
}
deviceEdit type |
设备功能 |
---|---|
dev_icon | 设备图标 |
set_icon | 图标 item |
set_name | 名称 item |
set_position | 位置 item |
thingarchercell_config.json
新增 cell
或者 groupCell
时,都需要在 thingarchercell_config
中按照格式添加对应的信息。
以下代码只用于举例说明,完整的文件内容请查看在 GitHub 查看 tuya-ui-bizbundle-android-demo。
{
"archerGroup": [
{
"name": "headerSection",
"clazz": "com.thingclips.smart.device_detail.group.HeaderGroup"
}
],
"archerCell": [
{
"name": "check_device_network",
"type": 1,
"clazz": "com.thingclips.smart.device_detail.cell.CheckDeviceNetworkArcherCell"
},
{
"name": "product_instruction",
"type": 1,
"clazz": "com.thingclips.smart.device_detail.cell.ProductInstructionArcherCell"
},
{
"name": "section_off_line_warn",
"type": 2,
"clazz": "com.thingclips.smart.device_detail.cell.OffLineWarnHeaderCell"
},
{
"name": "location_manage",
"type": 1,
"clazz": "com.thingclips.smart.device_detail.cell.LocationManageArcherCell"
},
{
"name": "group_edit_devices",
"type": 1,
"clazz": "com.thingclips.smart.device_detail.cell.GroupEditDeviceArcherCell"
}
]
}
参数 | 说明 |
---|---|
name | deviceDetail.json 中配置的 cellType |
type | item 的类型:
section 中存在 item 显示时,header 必显示 |
clazz | item 的 class |
dependencies {
api enforcedPlatform("com.thingclips.smart:thingsmart-BizBundlesBom:${biz_bom_version}")
implementation 'com.thingclips.smart:thingsmart-bizbundle-panelmore'
api "com.thingclips.smart:thingsmart:${sdk_version}}"
}
// 需要在项目的 Application 中增加 @HiltAndroidApp,如下面代码所示:
@HiltAndroidApp
public class ThingSmartApp extends Application {
@Override
public void onCreate() {
super.onCreate();
}
}
需要在 res
> values
> compat-colors.xml
中修改 appId
,将下面代码的 1234
替换成真正的 appId
。可以提交工单,申请获取 appId
。如果不配置三方语音控制,页面加载可能出现问题。
<integer name="appId">1234</integer>
参数说明
参数 | 说明 |
---|---|
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 = ThingHomeSdk.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"
}
]
}
]
实现 com.thingclips.smart.archer.api.cell.IArcherCell
或者 com.thingclips.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?{}
在 deviceDetailArcherCellConfig.json
中配置当前的 class
。
{
"name": "c_test_insert",
"type": 1,
"clazz": "com.thingclips.smart.bizubundle.panelmore.demo.CTestInsertCell"
},
{
"name": "c_test_async_insert",
"type": 1,
"clazz": "com.thingclips.smart.bizubundle.panelmore.demo.CTestAsyncInsertCell"
}
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.thingclips.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 |
该内容对您有帮助吗?
是意见反馈该内容对您有帮助吗?
是意见反馈