涂鸦设备群组 UI 业务包功能封装了群组业务逻辑和 UI 界面,包括 创建群组 和 编辑群组。
涂鸦支持根据用户设备的不同类型来创建群组,创建群组成功就可以达到群控的目的。
目前支持创建群组的设备有:
在 Android Studio 中建立工程,接入智能生活 App SDK 并完成业务包。
在 Module 的 build.gradle
中配置:
dependencies {implementation 'com.tuya.smart:tuyasmart-bizbundle-groupmanager:3.34.5-9'
}
接口说明
GroupState TuyaGroupManager.getInstance().createGroup(Activity activity,String devId);
参数说明
参数 | 说明 |
---|---|
activity | Activity 对象 |
devId | 设备 ID |
GroupState
返回值
值 | 说明 |
---|---|
SUPPORT | 设备支持创建群组 |
NOT_SUPPORT | 设备不支持创建群组 |
NONE | 设备不存在 |
接口说明
GroupState TuyaGroupManager.getInstance().editGroup(Activity activity,long groupId);
参数说明
参数 | 说明 |
---|---|
activity | Activity 对象 |
groupId | 群组 ID |
GroupState
返回值
值 | 说明 |
---|---|
SUPPORT | 支持编辑群组 |
NONE | 群组不存在 |
群组的控制需要进入群组面板。进入群组面板的示例,请查看下面的设备控制 UI 业务包的打开群组面板部分。
设备控制 UI 业务包是涂鸦智能设备控制面板的免开发维护、且具备动态更新的面板控制解决方案。在涂鸦安卓版 智能生活 App SDK 的基础上,该 UI 业务包 提供一套完整的 RN 面板的加载展示、设备控制的能力。大家无需额外开发,接入 UI 业务包即可使用。
在 Android Studio 中建立工程,接入 智能生活 App SDK 和添加 UI 业务包框架。
另外,还可以直接下载 UI 业务包的 Demo,修改 Demo 中的 Panel 模块的依赖来调试设备控制 UI 业务包。
必选配置
dependencies {implementation 'com.tuya.smart:tuyasmart-bizbundle-panel:4.2.0-22'
}
可选配置
地图相关依赖项
设备控制 UI 业务包中包含地图能力相关 API,底层通过接入第三库方来实现。中国大陆业务依赖高德地图,中国大陆以外业务依赖谷歌地图。高德地图在中国大陆以外无法使用,谷歌地图在中国大陆功能受限。因此,基于设备控制 UI 业务包开发的 App,如果需要发布在中国大陆应用市场,请选择依赖高德地图,如果需要发布在谷歌市场,请选择依赖谷歌地图。二者选一,不要同时依赖。
高德地图依赖项
implementation 'com.tuya.smart:tuyasmart-react-native-amap:3.35.5-rc.4'implementation 'com.amap.api:search:7.9.0'implementation 'com.amap.api:navi-3dmap:8.0.0_3dmap8.0.0'
谷歌地图依赖项
implementation 'com.tuya.smart:tuyasmart-react-native-googlemap:3.35.5-rc.2'implementation 'com.google.android.gms:play-services-maps:17.0.0'
IPC 面板相关依赖项
此依赖包含加载 IPC 面板所需的所有相关依赖。如无需 IPC 面板,不建议添加此依赖。如非必要而引入,会增加资源冲突的风险,同时也会增大 APK 包的体积。
implementation 'com.tuya.smart:tuyasmart-bizbundle-camera_panel:4.2.0-22'
混淆配置
在项目的 proguard-rules.pro
文件中,请配置设备控制 UI 业务包混淆信息,以确保其能正常运行。
# react-native
-keep,allowobfuscation @interface com.facebook.common.internal.DoNotStrip
-keep,allowobfuscation @interface com.facebook.proguard.annotations.DoNotStrip
-keep,allowobfuscation @interface com.facebook.proguard.annotations.KeepGettersAndSetters
# Do not strip any method/class that is annotated with @DoNotStrip
-keep @com.facebook.proguard.annotations.DoNotStrip class *
-keep @com.facebook.common.internal.DoNotStrip class *
-keepclassmembers class * {@com.facebook.proguard.annotations.DoNotStrip *;@com.facebook.common.internal.DoNotStrip *;
}
-keepclassmembers @com.facebook.proguard.annotations.KeepGettersAndSetters class * {void set*(***);*** get*();
}
-keep class * extends com.facebook.react.bridge.JavaScriptModule { *; }
-keep class * extends com.facebook.react.bridge.NativeModule { *; }
-keepclassmembers,includedescriptorclasses class * { native ; }
-keepclassmembers class * { @com.facebook.react.uimanager.UIProp ; }
-keepclassmembers class * { @com.facebook.react.uimanager.annotations.ReactProp ; }
-keepclassmembers class * { @com.facebook.react.uimanager.annotations.ReactPropGroup ; }
-dontwarn com.facebook.react.**
-keep class com.facebook.** { *; }
-keep,includedescriptorclasses class com.facebook.react.bridge.** { *; }# 高德地图
-dontwarn com.amap.**
-keep class com.amap.api.maps.** { *; }
-keep class com.autonavi.** { *; }
-keep class com.amap.api.trace.** { *; }
-keep class com.amap.api.navi.** { *; }
-keep class com.autonavi.** { *; }
-keep class com.amap.api.location.** { *; }
-keep class com.amap.api.fence.** { *; }
-keep class com.autonavi.aps.amapapi.model.** { *; }
-keep class com.amap.api.maps.model.** { *; }
-keep class com.amap.api.services.** { *; }# Google Play Services
-keep class com.google.android.gms.common.** {*;}
-keep class com.google.android.gms.ads.identifier.** {*;}
-keepattributes Signature,*Annotation*,EnclosingMethod
-dontwarn com.google.android.gms.**# MPAndroidChart
-keep class com.github.mikephil.charting.** { *; }
-dontwarn com.github.mikephil.charting.**-keep class com.tuya.**.**{*;}
-dontwarn com.tuya.**.**-keep,includedescriptorclasses class com.facebook.v8.** { *; }#TTT
-keep class * extends com.tuya.android.universal.base.TYBaseUniPlugin { *; }
-keep class com.tuya.smart.plugin.*.bean.**{ *; }
React Native 环境配置
涂鸦设备控制 UI 业务包包含开源框架React Native,版本为 0.59.10。
若你的 Android 工程未集成 React Native,请按本文步骤集成设备控制 UI 业务包。
若你的 Android 工程已集成 React Native,需按下面步骤操作,以确定是否可集成设备控制 UI 业务包:
若上述方式均无法集成 UI 业务包,则无法接入集成设备控制 UI 业务包。
在使用设备控制 UI 业务包功能前,请确保已经按照接入框架中的内容完成相关资源的引入及初始化工作。否则,设备控制 UI 业务包无法正常使用。也可参考 UI 业务包 Demo 中 app 模块的配置。
说明:此处只展示部分跳转面板的接口。更多的详细的接口,请查看
AbsPanelCallerService
类。
打开设备面板
跳转设备面板,无提示
接口说明
跳转到设备面板。如果设备已不存在,不会弹出 Toast 提示,直接 return 返回。
goPanel(Activity activity, DeviceBean deviceBean);
参数说明
参数 | 说明 |
---|---|
activity | 当前页面 context |
deviceBean | 设备信息 |
示例代码
AbsPanelCallerService service = MicroContext.getServiceManager().findServiceByInterface(AbsPanelCallerService.class.getName());service.goPanel(PanelActivity.this, deviceBean);
跳转设备面板,有提示
接口说明
跳转到设备面板,如果设备已不存在,会弹出 Toast 提示。
goPanelWithCheckAndTip(Activity activity, String devId)
参数说明
参数 | 说明 |
---|---|
activity | 当前页面 context |
devId | 设备 ID 通过 智能生活 App SDK 接口获取 |
示例代码
AbsPanelCallerService service = MicroContext.getServiceManager().findServiceByInterface(AbsPanelCallerService.class.getName());service.goPanelWithCheckAndTip(PanelActivity.this,devId);
打开群组面板
跳转群组面板,无提示
接口说明
跳转到群组 默认存在防抖, 防抖阈值 1.5s。如果群组已不存在,不会弹出 Toast 提示。
goPanel(Activity activity, GroupBean groupBean, boolean isAdmin);
参数说明
参数 | 说明 |
---|---|
activity | 当前页面 context |
groupBean | 群组信息 |
isAdmin | 是否是管理员。如果非管理员,当群组没有设备时,仅弹 Toast 提示;如果是管理员,会引导进入群组管理 |
示例代码
AbsPanelCallerService service = MicroContext.getServiceManager().findServiceByInterface(AbsPanelCallerService.class.getName());service.goPanel(PanelActivity.this, groupBean, false);
跳转面板,有提示
接口说明
跳转到设备面板,如果设备已不存在,会弹出 Toast 提示。
goPanelWithCheckAndTip(Activity activity, long groupId, boolean isAdmin);
参数说明
参数 | 说明 |
---|---|
activity | 当前页面 context |
groupId | 设备 groupId 通过 智能生活 App SDK 接口获取 |
isAdmin | 是否是管理员。如果非管理员,当群组没有设备时,仅弹 Toast 提示;如果是管理员,会引导进入群组管理 |
示例代码
AbsPanelCallerService service = MicroContext.getServiceManager().findServiceByInterface(AbsPanelCallerService.class.getName());service.goPanelWithCheckAndTip(PanelActivity.this, groupId,true);
TuyaSmartSdk.getEventBus().post(new PageCloseEventModel());
在加载面板过程中,会将面板文件会存放在当前 app
存储目录下。下次打开面板时,从缓存中加载该文件。如果面板文件包内容发生变更,需先清除缓存,再重新拉起新的面板文件包,变更内容才会生效。
⚠️注意:调用该接口会删除所有面板文件,加载面板时都将重新拉取文件。
示例代码
ClearCacheService service = MicroContext.getServiceManager().findServiceByInterface(ClearCacheService.class.getName());if (service != null) {service.clearCache(PanelActivity.this);}
检查项目的 module_app.json
文件中是否配置 com.tuya.smart.panel.base.RNVersionPipeLine
。
如果未配置,请在 PIPE_LINE_BUSINESS_PIPELINE_APPLICATION_START
和 PIPE_LINE_APPLICATION_SYNC
下增加该 PipeLine 配置。
如果已配置,请检查配置的位置是否正确。
"PIPE_LINE_BUSINESS_PIPELINE_APPLICATION_START": [..."com.tuya.smart.panel.base.RNVersionPipeLine"
],
"PIPE_LINE_APPLICATION_SYNC": ["com.tuya.smart.panel.base.RNVersionPipeLine"...
],
可在项目中配置下列最新版本的依赖。
implementation 'com.facebook.fresco:animated-drawable:2.6.0'implementation 'com.facebook.fresco:animated-webp:2.6.0'implementation 'com.facebook.fresco:animated-gif'
请先检查混淆是否正确配置。
接入设备控制 UI 业务包之后,必须实现家庭服务。否则,无法正常打开面板。
AbsBizBundleFamilyService familyService = MicroServiceManager.getInstance().findServiceByInterface(AbsBizBundleFamilyService.class.getName());familyService.shiftCurrentFamily(homeBean.getHomeId(), homeBean.getName());
下载完整示例代码。