智能场景 UI 业务包

更新时间:2024-04-01 06:08:16下载pdf

涂鸦 智能场景 UI 业务包 安卓版的业务功能包括 智能场景 模块的 添加智能编辑智能 的业务逻辑和 UI 界面。

背景信息

智能场景分为 一键执行场景自动化场景,分别简称为 场景自动化

  • 场景:用户添加动作,手动触发。
  • 自动化:由用户设定条件,当条件触发后自动执行设定的动作。

涂鸦支持用户根据实际生活场景,通过设置气象或设备条件,当条件满足时,让一个或多个设备执行相应的任务。

接入组件

创建工程

  1. 在 Android Studio 中建立您的工程,接入智能生活 SDK 并完成业务包 框架接入

    • 您的工程需要添加 Hilt 相关依赖才能使用场景业务包。请参考《谷歌开发者文档》Dependency injection with Hilt。具体插件之间的版本关联关系,请务必以 tuya-ui-bizbundle-android-demo 中 AGP、Hilt、Kotlin 的配套版本为准。
    • 自 5.8.0 版本 UI 业务包开始,Hilt 套件的最低版本要求为 2.43.2,包括 Hilt 插件、Hilt 工件和 Hilt 注解处理器,如此方可正常编译。
  2. 若您的工程需要使用智能场景 UI 业务包,则需要在主工程的资源目录 res/values/values.xml 中,添加如下配置:

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <bool name="is_scene_support">true</bool>
    </resources>
    
  3. 若您对场景数据多终端在线实时同步有强烈的诉求,建议您在登录态后使用场景业务前手动执行一次如下代码(应用存活周期内只需调用一次):

    SceneHomePipeLine().run()
    

配置 build.gradle


dependencies {
    api enforcedPlatform("com.thingclips.smart:thingsmart-BizBundlesBom:${biz_bom_version}")
    api ("com.thingclips.smart:thingsmart-bizbundle-scene")
    api "com.thingclips.smart:thingsmart:${sdk_version}}"
}

服务接口

提供服务

场景业务包实现 IThingSceneBusinessService 以提供服务。

示例代码

// 查询场景业务包服务
IThingSceneBusinessService iThingSceneBusinessService = MicroContext.findServiceByInterface(IThingSceneBusinessService.class.getName());

新增场景

通过查询家庭 ID 进入场景添加页。

接口说明

public abstract void addSceneBean(Activity activity, long homeId, int requestCode);
  • 5.0.0 版本 SDK 开始,可通过接口 iThingSceneBusinessService.addSceneBean 新增场景,onActivityResult 接收的回参类型是 NormalScene

  • 5.0.0 之前版本 SDK 通过 ITuyaSceneBusinessService.addScene 新增场景,onActivityResult 接收的回参类型是 SmartSceneBean。目前该方式已经废弃不推荐使用,但您仍可以通过 历史接口 进行查阅。

参数说明

参数 类型 说明
activity Activity Activity 对象
homeId long 家庭 ID,您可以通过 家庭信息管理 相关接口查询
requestCode int 请求 code,在 onActivityResult 处返回

示例代码

if(null != iThingSceneBusinessService && homeId != 0) {
  iThingSceneBusinessService.addSceneBean(activity, homeId, requestCode);
}

编辑场景

通过查询场景数据和家庭 ID 进入场景编辑页面。

接口说明

进入编辑场景页。

public abstract void editSceneBean(Activity activity, long homeId, NormalScene sceneBean, int requestCode);
  • 5.0.0 版本 SDK 开始,可通过接口 iThingSceneBusinessService.editSceneBean 编辑场景,onActivityResult 接收的回参类型是 NormalScene

  • 5.0.0 之前版本 SDK 通过 iThingSceneBusinessService.editScene 编辑场景,onActivityResult 接收的回参类型是 SmartSceneBean。目前该方式已经废弃不推荐使用,但您仍可以通过 历史接口 进行查阅。

参数说明

参数 类型 说明
activity Activity Activity 对象
homeId long 家庭 ID,您可以通过 家庭信息管理 相关接口查询
sceneBean NormalScene 场景数据对象,您可以通过 智能场景 相关接口查询
requestCode int 请求 code,在 onActivityResult 处返回

示例代码

ThingHomeSdk.getSceneServiceInstance().baseService().getSimpleSceneAll(homeId,
                new IResultCallback<List<NormalScene>>() {

            @Override
            public void onSuccess(List<NormalScene> normalScenes) {
                if (!normalScenes.isEmpty()) {
                    NormalScene sceneBean = normalScenes.get(0);
                    if (null != iThingSceneBusinessService) {
                        iThingSceneBusinessService.editSceneBean(SceneActivity.this, homeId, sceneBean, requestCode);
                    }
                }
            }

            @Override
            public void onError(String errorCode, String errorMessage) {

            }
        });

设置地理位置

使用场景条件和生效时间段前,需要用户设置 App 的地理位置。如果没有设置,则无法在选择条件时自动查询城市信息。但是,用户还是可以在城市列表自行选择。

接口说明

public abstract void setAppLocation(double longitude, double latitude);

参数说明

参数 说明
longitude 经度,由您的 App 自行接入的相关三方地图提供
latitude 纬度,由您的 App 自行接入的相关三方地图提供

示例代码

if(null != iThingSceneBusinessService){
    iThingSceneBusinessService.setAppLocation(lng, lat);
}

设置 App 地图类

场景条件中的地理位置,如果不需要非中国大陆地区账号,就无需调用。其他国家或地区的账号需要设置地图类,不设置默认则调用查询中国大陆城市接口。

接口说明

public abstract void setMapActivity(Class<? extends Activity> clazz);

参数说明

参数 说明
clazz 地图 Activity 类对象,可以选择接入 地图服务 UI 业务包

示例代码

if(null != iThingSceneBusinessService){
    // 下述示例是涂鸦内置的地图包装(接入地图服务 UI 业务包则可使用)。您可以根据自己需求采用三方地图实现
    iThingSceneBusinessService.setMapActivity(com.thingclips.smart.map.generalmap.ui.GeneralMapActivity.class);
}

设置地图选点数据

接入地图类之后,您需要将地图选点数据发给 UI 业务包,用来更新条件地理位置信息。

接口说明

public abstract void saveMapData(double longitude, double latitude, String city, String address);

参数说明

参数 说明
longitude 经度
latitude 纬度
city 城市信息
address 地址信息

示例代码

if(null != iThingSceneBusinessService){
    iThingSceneBusinessService.saveMapData(lng, lat, city, address);
}