免开发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());

其他

下载完整示例代码。

相关内容

热门资讯

linux入门---制作进度条 了解缓冲区 我们首先来看看下面的操作: 我们首先创建了一个文件并在这个文件里面添加了...
C++ 机房预约系统(六):学... 8、 学生模块 8.1 学生子菜单、登录和注销 实现步骤: 在Student.cpp的...
JAVA多线程知识整理 Java多线程基础 线程的创建和启动 继承Thread类来创建并启动 自定义Thread类的子类&#...
【洛谷 P1090】[NOIP... [NOIP2004 提高组] 合并果子 / [USACO06NOV] Fence Repair G ...
国民技术LPUART介绍 低功耗通用异步接收器(LPUART) 简介 低功耗通用异步收发器...
城乡供水一体化平台-助力乡村振... 城乡供水一体化管理系统建设方案 城乡供水一体化管理系统是运用云计算、大数据等信息化手段࿰...
程序的循环结构和random库...   第三个参数就是步长     引入文件时记得指明字符格式,否则读入不了 ...
中国版ChatGPT在哪些方面... 目录 一、中国巨大的市场需求 二、中国企业加速创新 三、中国的人工智能发展 四、企业愿景的推进 五、...
报名开启 | 共赴一场 Flu... 2023 年 1 月 25 日,Flutter Forward 大会在肯尼亚首都内罗毕...
汇编00-MASM 和 Vis... Qt源码解析 索引 汇编逆向--- MASM 和 Visual Studio入门 前提知识ÿ...
【简陋Web应用3】实现人脸比... 文章目录🍉 前情提要🌷 效果演示🥝 实现过程1. u...
前缀和与对数器与二分法 1. 前缀和 假设有一个数组,我们想大量频繁的去访问L到R这个区间的和,...
windows安装JDK步骤 一、 下载JDK安装包 下载地址:https://www.oracle.com/jav...
分治法实现合并排序(归并排序)... 🎊【数据结构与算法】专题正在持续更新中,各种数据结构的创建原理与运用✨...
在linux上安装配置node... 目录前言1,关于nodejs2,配置环境变量3,总结 前言...
Linux学习之端口、网络协议... 端口:设备与外界通讯交流的出口 网络协议:   网络协议是指计算机通信网...
Linux内核进程管理并发同步... 并发同步并发 是指在某一时间段内能够处理多个任务的能力,而 并行 是指同一时间能够处理...
opencv学习-HOG LO... 目录1. HOG(Histogram of Oriented Gradients,方向梯度直方图)1...
EEG微状态的功能意义 导读大脑的瞬时全局功能状态反映在其电场结构上。聚类分析方法一致地提取了四种头表面脑电场结构ÿ...
【Unity 手写PBR】Bu... 写在前面 前期积累: GAMES101作业7提高-实现微表面模型你需要了解的知识 【技...