免开发UI业务包,请查收:群组管理和设备控制
admin
2024-05-23 12:59:25
0

设备群组UI业务包

涂鸦设备群组 UI 业务包功能封装了群组业务逻辑和 UI 界面,包括 创建群组 和 编辑群组

功能说明

涂鸦支持根据用户设备的不同类型来创建群组,创建群组成功就可以达到群控的目的。

目前支持创建群组的设备有:

  • 普通 Wi-Fi 设备
  • 标准 Wi-Fi 设备

接入组件

创建工程

在 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);

参数说明

参数说明
activityActivity 对象
devId设备 ID

GroupState 返回值

说明
SUPPORT设备支持创建群组
NOT_SUPPORT设备不支持创建群组
NONE设备不存在

编辑群组

接口说明

GroupState  TuyaGroupManager.getInstance().editGroup(Activity activity,long groupId);

参数说明

参数说明
activityActivity 对象
groupId群组 ID

GroupState 返回值

说明
SUPPORT支持编辑群组
NONE群组不存在

群组控制

群组的控制需要进入群组面板。进入群组面板的示例,请查看下面的设备控制 UI 业务包的打开群组面板部分。

设备控制 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 业务包:

    • 若已集成 React Native,且版本 > 0.59.10,因版本兼容性问题,则无法集成设备控制 UI 业务包。
    • 若已集成 React Native,且 0.59.10 ≥ 版本 > 0.51,因 React Native 库冲突,不保证能够正常接入涂鸦面板。按下面两种方式进行操作:
      1. 移除 Android 工程中的 React Native,使用设备控制 UI 业务包依赖的 React Native 0.59.10。
      2. 将 Android 工程中集成的 React Native 进行更名,从而避免与业务包集成的 React Native 冲突。

    若上述方式均无法集成 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);}

常见问题

Q:打开设备面板时,提示 “当前版本不支持该设备,请至应用市场升级App”

检查项目的 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"...
    ],
    

Q:设备面板中的 GIF 图无动效

可在项目中配置下列最新版本的依赖。

  implementation 'com.facebook.fresco:animated-drawable:2.6.0'implementation 'com.facebook.fresco:animated-webp:2.6.0'implementation 'com.facebook.fresco:animated-gif'

Q:Release 包的设备控制 UI 业务包部分功能无法使用

请先检查混淆是否正确配置。

Q:无法使用打开设备面板

接入设备控制 UI 业务包之后,必须实现家庭服务。否则,无法正常打开面板。

  AbsBizBundleFamilyService familyService = MicroServiceManager.getInstance().findServiceByInterface(AbsBizBundleFamilyService.class.getName());familyService.shiftCurrentFamily(homeBean.getHomeId(), homeBean.getName());

其他

下载完整示例代码。

相关内容

热门资讯

育碧GDC2018程序化大世界... 1.传统手动绘制森林的问题 采用手动绘制的方法的话,每次迭代地形都要手动再绘制森林。这...
编译原理陈火旺版第三章课后题答... 下面答案仅供参考! 1.编写一个对于 Pascal 源程序的预处理程序。该程序的作用是...
MacBookPro M2芯片... MacBookPro M2芯片下如何搭建React-Native环境目录软件下载环境配置 目录 写在...
Android studio ... 解决 Android studio 出现“The emulator process for AVD ...
pyflink学习笔记(六):... 在pyflink学习笔记(一)中简单介绍了table-sql的窗口函数,下面简单介绍下...
创建deployment 创建deployment服务编排-DeploymentDeployment工作负载均衡器介绍Depl...
gma 1.1.4 (2023... 新增   1、地图工具    a. 增加【GetWorldDEMDataSet】。提供了一套 GEO...
AI专业教您保姆级在暗影精灵8... 目录 一、Stable Diffusion介绍    二、Stable Diffusion环境搭建 ...
vue笔记 第一个Vue应用 Document{{content}}{{...
Unity自带类 --- Ti... 1.在Unity中,自己写的类(脚本)的名字不能与Unit...
托福口语21天——day5 发... 目录 一、连读纠音 二、语料输入+造句输出 三、真题 一、连读纠音 英语中的连读方式有好几种...
五、排序与分页 一、排序 1、语法 ORDER BY 字段 ASC | DESC ASC(ascen...
Linux系统中如何安装软件 文章目录一、rpm包安装方式步骤:二、deb包安装方式步骤:三、tar....
开荒手册4——Related ... 0 写在前面 最早读文献的时候,每每看到related work部分都会选择性的忽略&...
实验01:吃鸡蛋问题 1.实验目的: 通过实验理解算法的概念、算法的表示、算法的时间复杂度和空间复杂度分析&...
8个免费图片/照片压缩工具帮您... 继续查看一些最好的图像压缩工具,以提升用户体验和存储空间以及网站使用支持。 无数图像压...
Spring Cloud Al... 前言 本文小新为大家带来 Sentinel控制台规则配置 相关知识,具体内容包括流控...
多项目同时进行,如何做好进度管... 多项目同时进行,如何做好进度管理? 大多数时候,面对项目进...
ATTCK红队评估实战靶场(二... 前言 第二个靶机来喽,地址:vulunstack 环境配置 大喊一声我...
【MySQL基础】3—多表查询 ⭐⭐⭐⭐⭐⭐ Github主页👉https://github.com/A-BigTr...