更新时间: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 | 
该内容对您有帮助吗?
是意见反馈该内容对您有帮助吗?
是意见反馈