什么是安卓版 UI 业务包 SDK?如何接入?

news2024/11/17 11:38:03

涂鸦 Android 业务包是指包含业务逻辑和 UI 界面的涂鸦垂直业务模块,旨在为基于涂鸦智能生活 SDK 开发的应用提供快速的一站式接入涂鸦业务模块的能力。

概述

目前提供的业务包种类繁多,例如:

  • H5 商城
  • 设备配网
  • 设备控制
  • IP 摄像机
  • 智能场景
  • 常见问题与反馈
  • 消息中心
  • 家庭管理
  • 固件 OTA 升级
  • 设备详情
  • 地图服务
  • 语音技能快绑
  • 设备群组
  • 主题色配置

架构设计

涂鸦 Android 业务包以服务化的方式开放,一切功能接入皆以 Service 的方式提供。

获取服务

通过 BizCore 获取某业务包提供的服务协议 Service 实现,之后调用其服务方法,以达到业务目的。

实现服务

有些业务包依赖的服务协议并没有实现方(例如面板业务包某些情况下会依赖配网服务,在未接入配网业务包的情况下,该服务协议无人实现),这时你可以创建自己的类来实现对应服务协议,并将它注册给 BizCore 来完善业务包功能。

准备工作

注册开发者账号

在对接涂鸦不同开发方案之前,需要在涂鸦 IoT 开发平台上注册开发者账号、创建产品、创建功能点等,创建账号之后会获取激活 SDK 的密钥。

集成智能生活 SDK

集成涂鸦智能生活 SDK,是接入涂鸦业务包的必要前提。

接入安卓版智能生活 App SDK 业务包框架

下面介绍涂鸦 智能生活 App SDK 安卓版业务包通用配置说明。

说明:涂鸦已经废弃 com.tuya.android.module:tymodule-config:latestVersion 的 classpath。为确保更好的兼容性,建议及时移除。

前提条件

业务包支持的安卓 minSdkVersion 为 19,targetSdkVersion 为 29,且仅支持通过 AndroidX 构建。

配置业务包

本小节介绍配置业务包涉及的文件介绍、修改说明、及相关安卓依赖的设置。

配置文件

业务包更新时,必须重新下载配置文件。

配置项说明是否必选
assetsmodule_app.json 和 x_platform_config.json 为服务化配置文件,请拷贝至 app 目录下的 assets 文件夹下,即可生效。
res
  • res/values/compat-colors.xml :业务包配置文件及默认颜色
  • res/values:资源配置文件
  • res:多语言文件可根据情况选择配置
res/values/compat-colors.xml 和 res/values 为必选
主题色
  • res/values/colors.xml:主题资源配置
  • assets/tyTheme/ui_theme_config.json:主题色 assets 资源配置

⚠️注意:需要同时修改 colors.xml 和 ui_theme_config.json 两个文件的内容来实现主题色配置。

否(此资源不再维护,推荐使用 主题色配置UI业务包)

主题色 配置文件修改说明:

  • colors.xml 参数说明:

    参数说明默认值
    ty_theme_color_m1正常态主题色资源#FFFF5A28
    ty_theme_color_m1_1禁用态主题色资源#33FF5A28
    ty_theme_color_m1_2按压态主题色资源#FFFF6B3E
    ty_theme_color_m1_alpha_55% 透明度的主题色资源#0DFF5A28
    ty_theme_color_m1_alpha_1010% 透明度的主题色资源#1AFF5A28
    ty_theme_color_m1_alpha_1515% 透明度的主题色资源#26FF5A28
    ty_theme_color_m1_alpha_2020% 透明度的主题色资源#33FF5A28
    ty_theme_color_m1_alpha_2525% 透明度的主题色资源#40FF5A28
    ty_theme_color_m1_alpha_3030% 透明度的主题色资源#4DFF5A28
    ty_theme_color_m1_alpha_3535% 透明度的主题色资源#59FF5A28
    ty_theme_color_m1_alpha_4040% 透明度的主题色资源#66FF5A28
    ty_theme_color_m1_alpha_4545% 透明度的主题色资源#73FF5A28
    ty_theme_color_m1_alpha_5050% 透明度的主题色资源#80FF5A28
    ty_theme_color_m1_alpha_5555% 透明度的主题色资源#8CFF5A28
    ty_theme_color_m1_alpha_6060% 透明度的主题色资源#99FF5A28
    ty_theme_color_m1_alpha_6565% 透明度的主题色资源#A6FF5A28
    ty_theme_color_m1_alpha_7070% 透明度的主题色资源#B3FF5A28
    ty_theme_color_m1_alpha_7575% 透明度的主题色资源#BFFF5A28
    ty_theme_color_m1_alpha_8080% 透明度的主题色资源#CCFF5A28
    ty_theme_color_m1_alpha_8585% 透明度的主题色资源#D9FF5A28
    ty_theme_color_m1_alpha_9090% 透明度的主题色资源#E6FF5A28
    ty_theme_color_m1_alpha_9595% 透明度的主题色资源#F2FF5A28
  • ui_theme_config.json 修改说明:

    {
    	"color_alpha":{
    	"N1":0.9,
    	"N2":0.7,
    	"N3":0.5,
    	"N4":0.3,
    	"N5":0.7,
    	"N6":0.2,
    	"N7":0.1,
    	"N8":0.4
    	},
    	"colors":{
    	"B1":"#F8F8F8",
    	"B2":"#FFFFFF",
    	"B3":"#FFFFFF",
    	"B4":"#FFFFFF",
    	"B5":"#FFFFFF",
    	"M1":"#FF5A28", // M1表示主题色配置,默认值为#FF5A28;仅M1支持修改为其他值,其他属性字段不支持修改
    	"M2":"#FF4444",
    	"M3":"#00CC99",
    	"M4":"#1989FA",
    	"M5":"#FF5A28"
    	},
    	"corner":{
    	"alert_corner_type":"angle",
    	"button_corner_type":"angle",
    	"card_corner_type":"angle"
    	},
    	"font":{
    	"app_bold_font":"",
    	"app_font":""
    	}
    }
    

Drawable 配置

bg_text_bts.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

	<item android:state_focused="true">
		<shape android:shape="rectangle">
			<corners android:radius="@dimen/mg_2" />

			<solid android:color="@color/primary_button_select_color" />
		</shape>
	</item>
	<item android:state_selected="true">
		<shape android:shape="rectangle">
			<corners android:radius="@dimen/mg_2" />

			<solid android:color="@color/primary_button_select_color" />
		</shape>
	</item>
	<item android:state_pressed="true">
		<shape android:shape="rectangle">
			<corners android:radius="@dimen/mg_2" />

			<solid android:color="@color/primary_button_select_color" />
		</shape>
	</item>
	<item android:state_enabled="true">
		<shape android:shape="rectangle">
			<corners android:radius="@dimen/mg_2" />

			<solid android:color="@color/primary_button_bg_color" />
		</shape>
	</item>
	<item android:state_enabled="false">
		<shape>
			<corners android:radius="@dimen/mg_2" />

			<solid android:color="@color/gray_99" />
		</shape>
	</item>

</selector>

主题(style)配置

<!-- 必选配置 -->
<!-- Base application theme. -->
<style name="Base_BizBundle_Theme" parent="AppTheme">
	<item name="status_font_color">@color/status_font_color</item>
	<item name="status_bg_color">@color/status_bg_color</item>
	<item name="navbar_font_color">@color/navbar_font_color</item>
	<item name="navbar_bg_color">@color/navbar_bg_color</item>
	<item name="app_bg_color">@color/app_bg_color</item>
	<item name="fragment_bg_color">@color/app_bg_color</item>
	<item name="list_primary_color">@color/list_primary_color</item>
	<item name="list_sub_color">@color/list_sub_color</item>
	<item name="list_secondary_color">@color/list_secondary_color</item>
	<item name="list_line_color">@color/list_line_color</item>
	<item name="list_bg_color">@color/list_bg_color</item>
	<item name="primary_button_font_color">@color/primary_button_font_color</item>
	<item name="primary_button_bg_color">@color/primary_button_bg_color</item>
	<item name="secondary_button_font_color">@color/secondary_button_font_color</item>
	<item name="secondary_button_bg_color">@color/secondary_button_bg_color</item>
	<item name="notice_font_color">@color/notice_font_color</item>
	<item name="notice_bg_color">@color/notice_bg_color</item>
	<item name="bg_normal_text_bt">@drawable/bg_text_bts</item>
	<item name="app_name">@string/app_name</item>
	<item name="is_splash_used">false</item>
	<item name="ap_default_ssid">@string/ap_mode_ssid</item>
	<item name="ap_connect_description">@string/ty_ap_connect_description</item>
	<item name="is_scan_support">@bool/is_scan_support</item>
	<item name="is_need_blemesh_support">@bool/is_need_blemesh_support</item>
	<item name="status_bg_color_75">@color/status_bg_color_75</item>
	<item name="status_bg_color_90">@color/status_bg_color_90</item>
</style>

应用清单(AndroidManifest.xml)

<!-- 必选配置 -->
<application
	android:supportsRtl="false"
	android:theme="@style/Base_BizBundle_Theme"
	tools:replace="android:theme"/>

依赖源

  • 根目录的 build.gradle 文件配置如下:

    allprojects {
    	repositories {
    		jcenter()
    		maven { url 'https://maven-other.tuya.com/repository/maven-releases/' }
    		maven { url 'https://jitpack.io' }
    	}
    }
    
  • App 的 build.gradle 文件配置:

    NDK 配置只支持 ARM 指令架构的 CPU 版本。

    android {
    	packagingOptions {
    		pickFirst 'lib/*/libc++_shared.so'
    		pickFirst 'lib/*/libgnustl_shared.so'
    	}
    
    	lintOptions {
    		abortOnError false
    	}
    
    	defaultConfig {
    		ndk { abiFilters "armeabi-v7a", "arm64-v8a" }
    	}
    
    	compileOptions {
    		sourceCompatibility 1.8
    		targetCompatibility 1.8
    	}
    }
    

初始化应用

在主线程初始化业务包通用设置:

// 请不要修改初始化顺序
Fresco.initialize(this);
// SDK 初始化
TuyaHomeSdk.init(this);

// 业务包初始化
TuyaWrapper.init(this, new RouteEventListener() {
	@Override
	public void onFaild(int errorCode, UrlBuilder urlBuilder) {
			// 路由未实现回调
			// 点击无反应表示路由未现实,需要在此实现, urlBuilder.target 目标路由, urlBuilder.params 路由参数
			Log.e("router not implement", urlBuilder.target + urlBuilder.params.toString());
	}
}, new ServiceEventListener() {
	@Override
	public void onFaild(String serviceName) {
			// 服务未实现回调
			Log.e("service not implement", serviceName);
	}
});
TuyaOptimusSdk.init(this);

// 注册家庭服务,商城业务包可以不注册此服务
TuyaWrapper.registerService(AbsBizBundleFamilyService.class, new BizBundleFamilyServiceImpl());
	//拦截已存在的路由,通过参数跳转至自定义实现页面
	RedirectService service = MicroContext.getServiceManager().findServiceByInterface(RedirectService.class.getName());
	service.registerUrlInterceptor(new RedirectService.UrlInterceptor() {
		@Override
		public void forUrlBuilder(UrlBuilder urlBuilder, RedirectService.InterceptorCallback interceptorCallback) {
			//Such as:
			//Intercept the event of clicking the panel right menu and jump to the custom page with the parameters of urlBuilder
			//例如:拦截点击面板右上角按钮事件,通过 urlBuilder 的参数跳转至自定义页面
			if (urlBuilder.target.equals("panelAction") && urlBuilder.params.getString("action").equals("gotoPanelMore")) {
				interceptorCallback.interceptor("interceptor");
				Log.e("interceptor", urlBuilder.params.toString());
			} else {
				interceptorCallback.onContinue(urlBuilder);
			}
		}
	});

登录或退出账号

业务包接入后,请在登录和退出用户账号时分别调用如下方法:

//登录
TuyaWrapper.onLogin();
//退出
TuyaWrapper.onLogout(Context context);

实现家庭服务

开发者可以通过继承 AbsBizBundleFamilyService 抽象类,实现设置当前家庭 homeId 和当前家庭名称 homeName。示例代码如下:

public class BizBundleFamilyServiceImpl extends AbsBizBundleFamilyService {

	private long mHomeId;
	private String mHomeName;

	@Override
	public long getCurrentHomeId() {
		return mHomeId;
	}

	@Override
	public void shiftCurrentFamily(long familyId, String curName) {
		super.shiftCurrentFamily(familyId, curName);
		mHomeId = familyId;
		mHomeName = curName;
	}
}

设置家庭数据

当获取家庭列表后,通过服务化调用设置家庭 homeId 和 homeName。示例代码如下:

AbsBizBundleFamilyService service = MicroServiceManager.getInstance().findServiceByInterface(AbsBizBundleFamilyService.class.getName());
// 设置为当前家庭的 homeId 和 homeName
service.shiftCurrentFamily(homeBean.getHomeId(), homeBean.getName());

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/173245.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

“深度学习”学习日记。与学习相关的技巧 -- 参数的更新

2023.1.20 在神经网络的学习这一章&#xff0c;学习过了利用 梯度下降法 对参数进行更新&#xff0c;目的是找到是损失函数的值尽量小的参数&#xff1b;像解决这样的问题称为 最优化 。 由于参数空间十分复杂、参数规模十分庞大&#xff0c;导致“最优化”的过程变得困难。 …

C规范编辑笔记(十二)

往期文章&#xff1a; C规范编辑笔记(一) C规范编辑笔记(二) C规范编辑笔记(三) C规范编辑笔记(四) C规范编辑笔记(五) C规范编辑笔记(六) C规范编辑笔记(七) C规范编辑笔记(八) C规范编辑笔记(九) C规则编辑笔记(十) C规范编辑笔记(十一) 正文&#xff1a; 放假了&#xff…

【数据结构】万字深入浅出讲解顺序表(附原码 | 超详解)

&#x1f680;write in front&#x1f680; &#x1f4dd;个人主页&#xff1a;认真写博客的夏目浅石. &#x1f381;欢迎各位→点赞&#x1f44d; 收藏⭐️ 留言&#x1f4dd; &#x1f4e3;系列专栏&#xff1a;C语言实现数据结构 &#x1f4ac;总结&#xff1a;希望你看完…

智能矿山电子封条系统 YOLOv5

智能矿山电子封条系统通过yolov5深度学习技术&#xff0c;对现场画面进出口以及主要的井口等重要地方对矿井人员变化、生产作业执勤状态及出入井人员等状况实时监控分析监测。我们使用YOLO(你只看一次)算法进行对象检测。YOLO是一个聪明的卷积神经网络(CNN)&#xff0c;用于实时…

Google AIY Vision Kit安装及国内配置

Google AIY Vision Kit安装及国内配置1. AIY Vision Kit组装环节Step 1&#xff1a;收集其他附件选择1&#xff1a;使用AIY项目应用程序选择2&#xff1a;使用显示器、鼠标和键盘Step 2&#xff1a;检查硬件清单Step 3&#xff1a;构建AIY Vision KitStep 3.1&#xff1a;获取最…

旺店通·企业奇门和用友BIP接口打通对接实战

旺店通企业奇门和用友BIP接口打通对接实战接通系统&#xff1a;旺店通企业奇门旺店通是北京掌上先机网络科技有限公司旗下品牌&#xff0c;国内的零售云服务提供商&#xff0c;基于云计算SaaS服务模式&#xff0c;以体系化解决方案&#xff0c;助力零售企业数字化智能化管理升级…

Mac和Windows局域网互传文件iPhone和Windows局域网互传文件

生活中&#xff0c;我们可以通过微信和QQ或网盘等等传输工具进而实现文件互传&#xff0c;但是面临一个问题&#xff0c;大文件无法上传&#xff0c;而且受到网速的限制等诸多因素影响&#xff0c;如今我们可以通过局域网进行实现文件互传&#xff0c;进而改变此种囧境。 首先在…

17道Redis 面试题

Redis 持久化机制缓存雪崩、缓存穿透、缓存预热、缓存更新、缓存降级等问题热点数据和冷数据是什么Memcache与Redis的区别都有哪些&#xff1f;单线程的redis为什么这么快redis的数据类型&#xff0c;以及每种数据类型的使用场景&#xff0c;Redis 内部结构redis的过期策略以及…

KVM安装部署 | 举例安装虚机Windows2012R2

目录 1、基础环境准备 2、KVM的安装 3、开启服务 4、开启图形化界面 5、也可以通过浏览器管理KVM 6、举例安装一个windows2012R2 1、基础环境准备 【关闭防火墙】 systemctl stop firewalld systemctl disable firewalld 【关闭selinux】 修改文件/etc/selinux/config…

Linux常用指令及Web程序的部署

作者&#xff1a;~小明学编程 文章专栏&#xff1a;Linux 格言&#xff1a;热爱编程的&#xff0c;终将被编程所厚爱。 目录 Linux中的常见指令 ls pwd cd 文件操作 touch cat mkdir echo rm cp mv man less vim head tail grep ps netstat Linux权限 搭建Ja…

模电相关知识

6 放大电路中的负反馈 6.1 反馈的基本概念及判断方法 6.4 深度负反馈放大电路放大倍数的分析 6.4.1 深度负反馈的实质 6.4.4 基于理想运放的放大倍数分析 6.4.4.1理想运放的线性工作区 理想运放的性能指标理想运放在线性区的特点 标准运放&#xff0c;有两个输入端和一个…

aws codesuit 在codebuild和codepipeline中集成jenkins

codebuild集成jenkins https://docs.aws.amazon.com/zh_cn/codebuild/latest/userguide/jenkins-plugin.html Setting up a CI/CD pipeline by integrating Jenkins with AWS CodeBuild and AWS CodeDeploy source选择本地的gitlab仓库&#xff0c;创建一个简单的springboot项…

Cert Manager 申请 SSL 证书流程及相关概念 - 一

2022.3.9 用 cert-manager 申请成功通配符证书 (*.ewhisper.cn), 2022.4.30 该证书距离过期还有 30 天&#xff0c;cert-manager 进行自动续期&#xff0c;但是却失败了。&#x1f631;&#x1f631;&#x1f631; 然后过了几天&#xff0c;在 2022.5.8, 最终成功了。如下图&a…

Vue3 项目实战 —— 后台管理系统( pc端 ) —— 动态多级导航菜单顶部侧边联动

前期回顾 0.活在风浪里的博客_CSDN博客-vue2,开源项目,Js领域博主0.活在风浪里擅长vue2,开源项目,Js,等方面的知识,0.活在风浪里关注css,safari,html5,scss,elementui,前端,es6,正则表达式,vue.js,express,ajax,webpack,echarts,json,html,typescript,sass,https,面试,ch…

离散数学-图论-图的矩阵表示(12.1)

图的矩阵表示 1 关联矩阵 定义&#xff1a;设无向图G<V,E>,V{v1,v2,⋅⋅⋅,vnv_1,v_2,,v_nv1​,v2​,⋅⋅⋅,vn​},E{e1,e2,⋅⋅⋅,eme_1,e_2,,e_me1​,e2​,⋅⋅⋅,em​},令mijm_{ij}mij​为顶点viv_ivi​与边eje_jej​的关联次数&#xff0c;则称(mij)nm(m_{ij})_{nm}…

九龙证券|景气度复苏与库存拐点双击,这个行业获主力看好!

今天计算机职业、电子、非银金融职业净流入规划居前&#xff0c;9股主力资金净流入超2亿元。 证券时报数据宝统计&#xff0c;今天沪深两市主力资金净流出46.1亿元&#xff0c;其间创业板净流出3.57亿元&#xff0c;沪深300成份股净流入28.21亿元。 申万一级职业中&#xff0c…

SpringAMQP - Work Queue 工作消息队列

目录 介绍 案例 测试 改进&#xff1a; 介绍 Work queues也被称为&#xff08;Task queues&#xff09;&#xff0c;任务模型简单来说就是让多个消费者绑定到一个队列&#xff0c;共同消费队列中的消息当消息处理比较耗时的时候&#xff0c;可能生产消息的速度会远远大于消…

机器人与未来

我们生活在“普适机器人”时代&#xff0c;机器人将像今天的智能手机一样融入日常生活&#xff0c;完成许多专门任务&#xff0c;并经常与人类并肩工作。 机器人革命将创造一个比现在更加生动和充满活力的未来。 到 2022 年&#xff0c;机器人将获得如此大的吸引力&#xff0…

全国地名点地统计模式分析

前言用不同的空间点模式分析方法&#xff0c;综合得出全国地名数据点的空间分布模式属于随机分布、均匀分布、聚集分布中的哪一种。一、点模式分析空间点模式分析是一种根据地理实体或事件的空间位置研究其分布模式的空间分析方法 。 空间点分布模式通常分为三种&#xff1a;随…

从汇编的角度去审视函数的调用【函数栈帧】

文章目录函数栈帧栈寄存器相关汇编指令函数栈帧的创建函数栈帧的销毁函数栈帧 我们在写C语言代码的时候&#xff0c;经常会把一个独立的功能抽象为函数&#xff0c;所以C程序是以函数为基本单位的。 那函数是如何调用的&#xff1f;函数的返回值又是如何待会的&#xff1f;函数…